ServercnxnFactory启动
来源:互联网 发布:java相关文献 编辑:程序博客网 时间:2024/05/18 12:30
在runFromConfig时,初始化了客户端与服务端的网络通信类ServerCnxnFactory,默认是NIOServerCnxnFactory,另外还有NettyServerCnxnFactory提供Netty通信方式。在启动QuorumPeer时内部会调用之前初始化好ServerCnxnFactory的start函数。
public void start() { stopped = false; if (workerPool == null) { workerPool = new WorkerService( "NIOWorker", numWorkerThreads, false); } for(SelectorThread thread : selectorThreads) { if (thread.getState() == Thread.State.NEW) { thread.start(); } } // ensure thread is started once and only once if (acceptThread.getState() == Thread.State.NEW) { acceptThread.start(); } if (expirerThread.getState() == Thread.State.NEW) { expirerThread.start(); } }WorkerService使用ExecutorServices实现的线程池,NIOServerCnxnFactory中包含了三个类:
(1)AbstactSelectThread:SelectorThread类和AcceptThread类的共同父类,维护一个selector选择器对象。
(2)AcceptThread:管理新的Zookeeper client连接请求,实际上就是利用父类的选择器selector监听ServerSocketChannel的“SelectionKey.OP_ACCEPT”事件,一旦来新的请求,负责建立发和客户端的连接SocketChannel,并从SelectorThread线程份分配一个线程,将该SocketChannel连接放入SelectorThread线程维护的acceptQueue队列中。
(3)SelectorThread:监听AcceptThread分配的已经建立的SocketChannel连接上发生的数据读写事件,并执行实际数据读写。实际上就是利用父类的选择器selector监听在acceptedQueue队列中建立好的连接的数据读写事件,一旦读写事件发生,调用handleIO函数处理读写请求。
阅读全文
0 0
- ServercnxnFactory启动
- 启动
- 启动
- 启动
- 启动
- 启动
- mysql无法启动启动
- nginx启动,是否启动
- Eclipse启动
- 启动BLOG
- 启动IE
- 服务器启动
- 启动菜单
- windows2k启动
- Windows启动
- soa 启动
- 注册表启动
- 项目启动
- Kafka学习整理三(borker(0.9.0及0.10.0)配置)
- 本地方法栈及native方法
- 嵌入式Linux初始化QAT失败 及 问题 解决
- 微信开发最重要的一步(服务器配置)
- 侧滑
- ServercnxnFactory启动
- pdf.js 在连续三天的坑当中终于趟出来了
- android Retrofit 注意事项
- Image onload 事件
- LintCode 两数之和
- 测试一下
- Android 监听应用内Activity生命周期
- java类对象自然顺序的相等一致性
- Kafka学习整理四(Producer配置)