《Zookeeper》源码分析(四)之ServerCnxnFactory的启动过程

ServerCnxnFactory

Zookeeper使用ServerCnxnFactory管理与客户端的连接,服务端每与一个客户端就会创建一个ServerCnxn实例并由ServerCnxnFactory管理,ServerCnxnFactory是一个抽象类,它有两个实现,可在配置文件zoo.cfg中通过设置zookeeper.serverCnxnFactory属性指定具体实现,默认使用NIOServerCnxnFactory
在这里插入图片描述

QuorumPeerMain类集群方式启动的时关于ServerCnxnFactory的启动过程大致如下:
在这里插入图片描述

整个过程大体分为4步:

  1. 调用ServerCnxnFactory的静态方法createFactory()创建实例
  2. 根据配置文件的属性进行初始化
  3. 设置到QuorumPeer的属性中
  4. QuorumPeer调用start()方法启动ServerCnxnFactory实例

接下来逐步分析ServerCnxnFactory的创建及启动过程。

1. 创建ServerCnxnFactory

QuorumPeerMain启动过程中创建ServerCnxnFactory的代码如下:

在这里插入图片描述

默认情况下只创建cnxnFactory,接下来看下ServerCnxnFactory.createFactory()方法。
在这里插入图片描述

NIOServerCnxnFactory的无参函数是个空函数,后续通过调用configure()函数进行参数赋值及初始化。

2. 配置属性configure()

先看下NIOServerCnxnFactory的数据结构:
在这里插入图片描述

在这些属性中最重要的是四类线程:

  1. accept线程,此类线程只有一个。它主要是接收来自客户端的连接并将其分配给select线程
  2. select线程,有N个,可通过zookeeper.nio.numSelectorThreads设置。监听读写事件并交给worker线程具体处理。
  3. worker线程,用来负责socket的读写,有N个。处理具体的请求。
  4. expirer线程,用于管理连接的线程,只有1个。管理过期的连接。

接下来看下configure()方法对这些属性的初始化:
在这里插入图片描述

acceptThread传进去的addr即客户端地址,即clientPort配置的端口号,默认2181。

3. 启动start()

属性配置完后就通过start()方法启动,源码过程如下:
在这里插入图片描述

start()的过程主要是启动了四类线程,至此,ServerCnxnFactory已经启动成功,下文继续分析它的工作原理。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值