ZooKeeper

ZooKeeper源码分析(二)网络通信

无论是单机模式的ZooKeeperServer,还是集群模式的QuorumPeer,都是通过创建一个ServerCnxnFactory处理网络通信(Cnxn=Connection),它的实现类由createFactory()方法创建

默认使用NIOServerCnxnFactory实现,也可以通过System Property进行配置,key为zookeeper.serverCnxnFactory。ZooKeeper自带的另一种实现为NettyServerCnxnFactory,下面先以NIOServerCnxnFactory为例说明。

ServerCnxnFactory创建后都会执行一下configure()方法进行配置和初始化

NIOServerCnxnFactory实现了Runnable接口,将自己包装在configure()创建一个Thread中运行。configure()初始化了ServerSocketChannel并注册selector。

上一篇说到的启动入口start()方法仅是单纯地调用thread.start(),执行NIOServerCnxnFactory的run()方法,其中是典型的NIO Selector的处理逻辑。

每一个连接对应一个NIOServerCnxn对像,新建的连接将被添加到cnxns集合以及ipMap

另外值得注意的是最大链接数限制,是针对InetAddress进行统计的,来自某个ip的连接数不可以超过maxClientCnxns

对于每一个具体的读写事件处理,都会转交到NIOServerCnxn的doIO()方法中

文中提到的核心类包括

  1. ServerCnxnFactory
  2. NIOServerCnxnFactory
  3. NettyServerCnxnFactory
  4. NIOServerCnxn

doIO()方法中涉及ZooKeeper通信协议相关的内容,将在后续的文章中详细介绍。

 

© 2014 - 2015, 高飞航.cn. 版权所有.

About gaofeihang

开发工程师,本站的作者。欢迎留下您宝贵的意见!

发表评论

电子邮件地址不会被公开。 必填项已用*标注