03_一次会话的创建过程
2021-04-13 23:00:34 0 举报
一次会话的创建过程
作者其他创作
大纲/内容
放入队列
ClinentCnxnSocketNIO中的doIO()方法
ConnectRequest封装连接信息
管理客户端和服务端所有网络I/O
ZookeeperMain启动类
构造连接请求
4、初始化客户端网络链接器
判断是否时创建会话请求
会话创建阶段
获取I/O实例后,处理读和写
ClientWatcherManager
第一次连接
对应的Watcher事件
客户端请求发送队列
waitingEvents
保存
SendThread(clientCnxnSocket)
传递给EventThread
pendingQueue
Packet对象
run()方法处理连接
从outgoingQueue队列中取出待发送Packet
从事件Watcher管理器取出对应Watcher
EventThread
5、初始化底层I/O处理器
读就绪
读取响应信息,解析权限等信息并进行处理
序列化成ByteBuffer,发送给服务端
放入队列中
处理客户端事件
outgoingQueue
初始化阶段
通知地址管理器:HostProvider,当前成功连接的地址是谁
sendThread.readRespons()
new Zookeeper()
初始化待处理事件队列
入口
初始化完成后,调用start()方法启动两个线程
ClientCnxnSocket:底层I/O处理器
通过ConnectStringParser解析器解析连接地址,打乱顺序,放入地址列表管理器中
存放所有等待客户端处理的事件
5、初始化两个队列
是
不是
进一步包装网络I/O层对象
连接成功
调用sendThread.primeConnection();
服务端响应等待队列
反序列化
拿到连接地址,通过ClinentCnxnSocketNIO类进行Socket连接和注册
SyncConnected-None
封装
如果在初始化zookeeper对象时,传入了Watche对象,客户端会将此Watcher保存到ClientWatcherManager
把网络I/O处理器当参数传递
取出对应Watcher
HostProvider:地址列表管理器
发送sendPing()
初始化两个核心线程
2、创建客户端Watcher管理器,设置默认Watcher
初始化各种信息,命令,连接地址,watch事件
new ClientCnxn()
1、初始化zookeeper对象
放入pendingQueue队列
readConnectResult()方法处理
获取sessioId
3、构造服务器地址列表管理器
生成事件
写就绪
响应处理阶段
0 条评论
回复 删除
下一页