当前位置: 首页 > 网络应用技术

新连接交互过程的源代码的Zookeeper源代码5分析(单服务器服务器和客户端)

时间:2023-03-09 13:15:43 网络应用技术

  欢迎大家注意github.com/hsfxuebao。我希望这对每个人都会有所帮助。如果您认为有可能

  在上一篇文章的流程图之后,应几乎理解ZK新连接的一般过程。接下来,开始详细的代码分析。这也是三步步行。源代码将更清晰,方便地阅读。

  应该注意的是,许多ZK代码都是由内部类完成的。因此,在分析源代码时,可以根据源代码安排该方法名称,但仅显示源代码的一般过程和角色。

  上一篇文章分析了客户端连接连接的源代码分析。

  实际上,当第一步是调用socketchanel.connect()方法时,第二步已接收到新连接的通信并生成会话信息,但是为了促进理解,我们仍然将第二步作为第一步源代码将进行详细说明。

  NioservercnxnFactory负责使用Selector Multi -Way Replica选项获取新的数据并从多个客户端发送数据。因此,在交互式过程中,这是服务器端的起点。要求的数据。

  其中有几个内部类:如下:

  AcceptThread线程负责从客户端接收连接,并将Socketchaannel放入SelectHread的Acceptedqueue队列中。

  SelectHread线程负责处理读取事件,然后将Ioworkrequest.dowork()方法处理并移交给处理。详细的代码如下:

  这表示服务器端客户端的连接对象。服务器上新连接的性能是nioservercnxn对象。此对象绑定到相应的选择键和套接字。此类最重要的是doio()方法。在此方法中,它将确定读取事件,并根据相应值处理。在新的连接过程中,仅将分析读数。关键源代码如下:

  上一篇文章解释说,此类别是ZK的服务器实例。每个ZK服务器都对应于Zookeeperser实例。服务器中有许多属性配置,但是对先前的分析进行了分析,因此此过程代码不会做得太多。引言,如果您有兴趣,则可以阅读上一篇文章。

  客户端有Ping心跳间隔时间,并且服务器上有Ticktime生存检测时间。这两个属性意味着ping heartbeat检测间隔与客户端端不同。请重复,服务器上的tick时间间隔时间是确定服务器端上的客户端连接对象是否每隔时间死亡。心跳是客户端告诉服务器我还活着。Ticktime的含义是定期删除不告诉服务器的连接。

  此类的名称以此类的功能命名。实际上,此类的功能主要是会话到期判决的操作和更新会话状态。确定会话到期是在以后分析PING过程。建立新连接时,这取决于如何更新会话状态。

  如前所述,运行时只有三个RequestProcessor处理链:PrepRequestProcessor,SyncrequestProcessor和FinalRequestProcessor。前两个是线程对象,最后一个是一个普通对象。未经分析,接下来的三个请求处理器不会分析。如果您有兴趣,可以阅读以前的文章。

  在第二步之后,我输入了第三步的步骤,以接收服务器响应并致电监视器。

  如前所述,SendThread负责发送和接收软件包数据。当服务器发送新的连接响应时,类将相应地接收和处理。此分析只会分析逻辑零件,并且不会分析其他逻辑。

  该类已在此类中处理的是OP_READ类型的NIO事件。

  在此基本上是成功的,接下来是触发ZK的侦听器。

  如前所述,换句话说,SendThread负责与服务器连接,EventThread负责与SendThread连接以处理由客户端本身生成的ZK事件。

  在此处执行新连接的过程已执行。接下来,查看ClientWatchManager如何与Watcher绑定ZK事件。

  此类别管理四种逻辑类型的听众。至于特定类型,您可以读取先前的文章。LET简单地查看其物质方法的实现。

  我不得不说这是一大批工程。在阅读了ZK的源代码后,它对通常的使用和某些配置有了更深入的了解,但是仍然对ZK的ByteBuffer空间大小的4字节分配感到困惑。以后再回来。

  考虑这里的耐心还必须确定思考ZK的Xiuer。

  Zookeeper 3.7版本GitHub源代码注释分析

  ## ZK源代码分析系列

  Zookeeper原理和源代码学习系列Zookeeper学习系列Zookeeper源代码系列

  原始:https://juejin.cn/post/7100111462823100424