zookeeper client分析

本文深入剖析Zookeeper客户端的工作流程,包括重要概念如ZooKeeper、Watcher、SendThread和EventThread,详细解释了客户端初始化、请求发送与响应处理的过程,以及超时管理和IO模型。此外,还讨论了Watcher与StatCallback的区别。
摘要由CSDN通过智能技术生成

1)几个重要概念 

  • ZooKeeper:客户端入口

  • Watcher:客户端注册的callback

  • ZooKeeper.SendThread: IO线程

  • ZooKeeper.EventThread: 事件处理线程,处理各类消息callback

  • ClientCnxnSocketNIO:继承自ClientCnxnSocket,专门处理IO


2)zookeeper初始化

  • 应用提供watch实例

  • 实例化zookeeper

    • 实例化socket,默认使用ClientCnxnSocketNIO,可通过zookeeper.clientCnxnSocket配置定制

    • 实例化ClientCnxn

    • 实例化SendThread

    • 实例化EventThread

  • 启动zookeeper

    • 启动SendThread

      • 连接服务器(见SendThread.startConnect)

        • 产生真正的socket,见ClientCnxnSocketNIO.createSock

        • 向select注册一个OP_CONNECT事件并连接服务器,由于是非阻塞连接,此时有可能并不会立即连上,如果连上就会调用SendThread.primeConnection初始化连接来注册读写事件,否则会在接下来的轮询select获取连接事件中处理

        • 复位socket的incomingBuffer


        • 连接成功后会产生一个connect型的请求发给服务,用于获取本次连接的sessionid

        • 进入循环等待来自应用的请求,如果没有就根据时间来ping 服务器


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值