欢迎大家注意github.com/hsfxuebao。我希望这对每个人都会有所帮助。如果您认为有可能
心跳检测的源代码过程不长,但是如果您真正了解此过程,则必须了解ZK的各种参数和功能,否则此过程将无法理解核心想法。如果您对一般过程和参数感兴趣意思分析,您可以看到心跳检测过程和会话时间参数分析
心跳检测的发送逻辑在此线程对象中完成。它将确定每个ping的时间间隔以及何时发送ping请求。下一篇文章将有机会详细分析特定参数的意义。
与套接字进行交互,负责从套接字进行编写和读取数据。在ping过程的第一步中,只会执行写作操作,因此您只需要注意写作操作的源代码即可。
实际上,当第一步是调用socketchanel.connect()方法时,第二步已接收到新连接的通信并生成会话信息,但是为了促进理解,我们仍然将第二步作为第一步源代码将进行详细说明。
NioservercnxnFactory负责使用Selector Multi -Way Replica选项获取新的数据并从多个客户端发送数据。因此,在交互式过程中,这是服务器端的起点。要求的数据。
该作品与新连接分析相同。有关详细信息,请参阅:新连接交互过程的源代码(单机器服务器和客户端客户端)的源代码的分析)
这表示服务器端客户端的连接对象。服务器上新连接的性能是nioservercnxn对象。此对象绑定到相应的选择键和套接字。此类最重要的是doio()方法。在此方法中,它将确定读取事件,并根据相应值处理。在新的连接过程中,仅将分析读数。关键源代码如下:
该作品与新连接分析相同。有关详细信息,请参阅:新连接交互过程的源代码(单机器服务器和客户端客户端)的源代码的分析)
上一篇文章解释说,此类别是ZK的服务器实例。每个ZK服务器都对应于Zookeeperser实例。服务器中有许多属性配置,但是对先前的分析进行了分析,因此此过程代码不会做得太多。引言,如果您有兴趣,则可以阅读上一篇文章。
客户端有Ping心跳间隔时间,并且服务器上有Ticktime生存检测时间。这两个属性意味着ping heartbeat检测间隔与客户端端不同。请重复,服务器上的tick时间间隔时间是确定服务器端上的客户端连接对象是否每隔时间死亡。心跳是客户端告诉服务器我还活着。Ticktime的含义是定期删除不告诉服务器的连接。
该作品与新连接分析相同。有关详细信息,请参阅:新连接交互过程的源代码(单机器服务器和客户端客户端)的源代码的分析)
现在您已经分析了更新会话时间,然后您将不进行分析。只需查看更新后的会话时间即可。
客户端上有一组机制可以保留会话会话,并且服务器肯定会有它。此类的作用是继续询问将过期的会话过期,如果该会话过期,则将相应地处理。
服务器端可在客户端上保持许多连接。判断这些客户端是否仍然幸存的方法是由ZK配置的tick时间属性。一个tank上的会话代表此时将会到期的会话,因此Session Tracker只需要遍历需要删除的会话每次Ticktene单元需要删除它时。
技能在中间的SessionTracker插曲,然后查看请求处理器链被处理到PING操作的内容。
如前所述,运行时只有三个RequestProcessor处理链:PrepRequestProcessor,SyncrequestProcessor和FinalRequestProcessor。前两个是线程对象,最后一个是一个普通对象。未经分析,接下来的三个请求处理器不会分析。如果您有兴趣,可以阅读以前的文章。
正常的过程来到这里,服务器的处理基本上是终点,最后一步也非常简单。如果字节扣空间足够,那就完整了。
在第二步完成后,它进入第三步的阶段以接收服务器响应并处理,但是当响应收到响应时,Ping请求不会做任何事情。
如前所述,SendThread负责发送和接收软件包数据。当服务器发送新的连接响应时,类将相应地接收和处理。此分析只会分析逻辑零件,并且不会分析其他逻辑。
该类已在此类中处理的是OP_READ类型的NIO事件。
在这里,您只需要分析sendThread的readResponse()方法。此方法用于处理普通请求响应。
在这一点上,Ping的交互过程已经结束。
Zookeeper 3.7版本GitHub源代码注释分析
## ZK源代码分析系列
Zookeeper原理和源代码学习系列Zookeeper学习系列Zookeeper源代码系列
原始:https://juejin.cn/post/7100148936102379550