来源:
《从Paxos到Zookeeper》
https://www.cnblogs.com/GrimMjx/p/10922480.html
https://blog.csdn.net/huyangyamin/article/details/77743624
https://www.bilibili.com/video/av32715941?from=search&seid=9380652373328528650
以getData为例:
从注册、存储、通知的角度来看:
- 发起注册请求
首先封装了一个WatchRegistration对象,暂时保存数据节点的路径和Watcher对象的关系,用来等服务端完成注册,发送响应给客户端的时候,提取出Watcher交给WatcherManager真正地保存
概念:packet可以看成一个最小的通信协议单元,用于进行客户端与服务端之间的网络传输
WatchRegistration被封装在了packet对象里发送给服务端,接着将packet对象放到了发送队列outgoingQueue里(packet只序列化了requestHeader和request两个属性,没有序列化WatchRegistration,也就是说,服务端不会接收到节点路径和watcher对象的关系,回调的业务逻辑代码也不会给服务端)
//此方法由Packet p调用:p.createBB()
public void createBB() {
try {
...
//序列化requestHeader
if (this.requestHeader != null) {
this.requestHeader.serialize(boa, "header");
}
...
//序列化request
} else if (