zookeeper源码之客户端网络通信模块

Posted zhangwanhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zookeeper源码之客户端网络通信模块相关的知识,希望对你有一定的参考价值。

ClientCnxn

  为客户端发送请求到服务端,管理底层IO连接。 将用户调用的请求对象(RequestHeader、Request)封装成Packet对象,存入发送队列。内部有一个线程会不断读取发送队列中的Packet对象,通过NIO将Packet对象发送到服务端,然后将Packet对象放入pending队列,该线程会不断读取服务端的返回信息,并且将结果设置到Packet对象的Response,ReplyHeader对象中。

//等待发送的数据包队列
private final LinkedList<Packet> outgoingQueue = new LinkedList<Packet>();
//发送后等待结果的数据包队列
private final LinkedList<Packet> pendingQueue = new LinkedList<Packet>();

class SendThread extends Thread {
        boolean doIO() throws InterruptedException, IOException {
            ...if (!outgoingQueue.isEmpty()) {
                        ByteBuffer pbb = outgoingQueue.getFirst().bb;
                        sock.write(pbb);
                        if (!pbb.hasRemaining()) {
                            sentCount++;
                            Packet p = outgoingQueue.removeFirst();
                            if (p.header != null
                                    && p.header.getType() != OpCode.ping
                                    && p.header.getType() != OpCode.auth) {
                                pendingQueue.add(p);
                            }
                        }
                    }
                }
            ...
        }
     ...
        @Override
        public void run() {
            ...while (zooKeeper.state.isAlive()) {
                ...if (doIO()) {
                                lastHeard = now;
                             }
                ...
            }
            ...

    }

 通信协议

  通信协议即客户端和服务端之间的序列号和反序列号方式。详见zookeeper源码之通信协议

以上是关于zookeeper源码之客户端网络通信模块的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper总结之客户端执行核心模块

Zookeeper Session源码

zookeeper源码之服务端

zookeeper源码之服务端启动模块

zookeeper源码之请求协议

zookeeper源码之临时节点管理