《Zookeeper》从零开始学Zookeeper源码(二)之数据序列化与通信协议

目录

  • 序列化与反序列化
  • 通信协议
    • 请求头的数据结构
    • 响应头的数据结构

序列化与反序列化

zookeeper的客户端与服务端、服务端与服务端之间会进行一系列的网络通信,在进行数据的传输过程中就涉及到序列化与反序列化,zookeeper使用Jute作为它的序列化组件,在使用的时候,需要序列化与反序列化的对象实现Record接口并实现该接口的serialize()deserialize()方法,先看下接口Record

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RO8tixom-1691312271285)(C:\Lanna\技术经验\zookepper\图片\2\1.png)]

它只有两个方法,分别是serialize()deserialize(),下面以ReplyHeader为例看下它的使用。

    1. 实现接口Record

《Zookeeper》从零开始学Zookeeper源码(二)之数据序列化与通信协议_第1张图片

    1. 创建BinaryOutputArchive

在这里插入图片描述

    1. 序列化。上一步中调用BinaryOutputArchivewriteRecord()方法,看下源码:

在这里插入图片描述

进入writeRecord()方法调用Record实现类的serialize()方法进行序列化。

    1. 反序列化。创建BinaryInputArchive,调用Record实现类的deserialize()方法进行反序列。

在这里插入图片描述

以上就是Jute进行序列化与反序列化的基本过程。

通信协议

基于TCP/IP协议,zookeeper实现了自己的通信协议,设计上,客户端与服务端、服务端与服务端之间的网络通信数据结构,对于请求,包含数据总长度、请求头与请求体,对于响应,包含数据总长度、响应头与响应体,如下图。

请求协议:

《Zookeeper》从零开始学Zookeeper源码(二)之数据序列化与通信协议_第2张图片

响应协议:

《Zookeeper》从零开始学Zookeeper源码(二)之数据序列化与通信协议_第3张图片

请求头的数据结构

在这里插入图片描述

响应头的数据结构

在这里插入图片描述

对于请求体与响应体,不同的请求体和响应体的数据结构是不同的,可以参考/zookeeper-jute/target/generated-sources/java/org/apache/zookeeper/proto该目录下的类。
《Zookeeper》从零开始学Zookeeper源码(二)之数据序列化与通信协议_第4张图片

你可能感兴趣的:(Zookeeper,zookeeper)