目录
- 客户端的命令处理过程
- 1. ZooKeeper.create()
- 2. ClientCnxn.submitRequest()
- 3. SendThread.run()
- 4. ClientCnxnSocket.doTransport()
- 5. SendThread.readResponse()
客户端的命令处理过程
以创建节点命令为例,整个过程流程如下:
- CliCommand命令在抽象方法exec()方法中调用ZooKeeper实例的create()方法传送给Zookeeper处理
- Zookeeper对命令进行一定的包装后通过ClientCnxn.submitRequest()方法交由ClientCnxn处理
- ClientCnxn将命令请求存入outgoingQueue队列中等待异步处理
- SendThread的run()循环调用ClientCnxnSocket.doTransport()方法
- ClientCnxnSocket.doTransport()方法不断从ClientCnxn.outgoingQueue队列中读取请求并发送给服务器处理
- 服务器处理结束后返回结果,SendThread不断读取来自服务器的响应并将结果更新到请求中
- 请求Packet的finished标志更新,打印结果
对于不同的请求,除了第1步的入口不同,后续的过程都是类似的,接下来通过源码分析整个过程。
1. ZooKeeper.create()
2. ClientCnxn.submitRequest()
3. SendThread.run()
4. ClientCnxnSocket.doTransport()
将请求发送给服务端,服务端处理结束后向客户端发送相应结果,此时依旧由ClientCnxnSocket从最底层的Socket读取结果,将读取的响应流交给SendThread处理。
5. SendThread.readResponse()
至此,客户端的一个命令处理过程介绍到此结束。