网站内地图位置怎么做,华为认证培训机构排行榜,ipad wordpress,自己做网站买东西目录 NIOServerCnxnreadPayload()handleWrite(k)process() NIOServerCnxn
在上一节IOWorkRequest的doWork()方法中提到会将IO就绪的key通过handleIO()方法提交给NIOServerCnxn处理#xff0c;一个NIOServerCnxn代表客户端与服务端的一个连接#xff0c;它用于处理两者之间的… 目录 NIOServerCnxnreadPayload()handleWrite(k)process() NIOServerCnxn
在上一节IOWorkRequest的doWork()方法中提到会将IO就绪的key通过handleIO()方法提交给NIOServerCnxn处理一个NIOServerCnxn代表客户端与服务端的一个连接它用于处理两者之间的交互先看下其类结构
从类结构可知NIOServerCnxn继承了ServerCnxn实现了Stats和Watcher接口所以说它本质上也是一个Watcher。再看下它的数据结构
NIOServerCnxn主要负责客户端与服务端的数据的收发其中收到的数据存放于incomingBuffer与lenBuffer待发送的存放于outgoingBuffers。接下来我们看下处理IO请求的doIO()方法。
如果是读就绪则调用readPayload()处理接收到的数据如果是写就绪则调用handleWrite(k)发送数据。
readPayload()
读就绪事件
最终是将数据提交给服务器实例zkServer进行处理。
handleWrite(k)
写就绪事件
到这里不禁好奇outgoingBuffers的数据怎么获得的呢NIOServerCnxn对外提供了sendBuffer(ByteBuffer... buffers)方法当需要发送数据给客户端时可调用此方法
process()
NIOServerCnxn实现了Watcher接口Watcher只有一个方法即事件的回调方法process()。
接下来我们详细分析下数据的序列化serialize()从中可以看出zookeeper通信的响应协议。
至此NIOServerCnxn的简单介绍就到此为止总结一下它的功能它是服务端与客户端通信的最底层处理此外它本身也是一个Watcher。
至此服务端与客户端的通信环境分析就到此在NIOServerCnxn.readPayload()方法中会把来自客户端的请求传递给服务器实例ZookeeperServer处理zookeeper集群中有三种角色Leader、Follower、Observer不同的角色ZookeeperServer实例类型是不一样的具体得等到选举结束确定角色后才会创建相应的实例所以从下文开始分析zookeeper的选举通信以及选举过程。