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

这篇具有很好参考价值的文章主要介绍了《Zookeeper》从零开始学Zookeeper源码(二)之数据序列化与通信协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

序列化与反序列化

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

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

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

    1. 实现接口Record

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

    1. 创建BinaryOutputArchive

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

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

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

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

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

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

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

通信协议

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

请求协议:

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

响应协议:

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

请求头的数据结构

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

响应头的数据结构

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

对于请求体与响应体,不同的请求体和响应体的数据结构是不同的,可以参考/zookeeper-jute/target/generated-sources/java/org/apache/zookeeper/proto该目录下的类。
文章来源地址https://www.toymoban.com/news/detail-643778.html

到了这里,关于《Zookeeper》从零开始学Zookeeper源码(二)之数据序列化与通信协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++ 使用rapidjson对数据序列化和反序列化(vs2109)

      RapidJSON是腾讯开源的一个高效的C++ JSON解析器及生成器,它是只有头文件的C++库,综合性能是最好的。 1. 安装 在NuGet中为项目安装tencent.rapidjson 2. 引用头文件 #include rapidjson/document.h #include rapidjson/memorystream.h #include rapidjson/prettywriter.h 3. 头文件定义 添加测试json字符串和类型

    2024年02月07日
    浏览(37)
  • Flink 数据序列化

    大家都知道现在大数据生态非常火,大多数技术组件都是运行在 JVM 上的, Flink 也是运行在 JVM 上,基于 JVM 的数据分析引擎都需要将大量的数据存储在内存中,这就不得不面临 JVM 的一些问题,比如 Java 对象存储密度较低等。针对这些问题,最常用的方法就是实现一个显式的

    2024年02月04日
    浏览(77)
  • 【数据结构】二叉树篇|超清晰图解和详解:二叉树的序列化和反序列化

    博主简介: 努力学习的22级计算机科学与技术本科生一枚🌸 博主主页: @是瑶瑶子啦 每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏 🍊 序列化 :本质就是 二叉树的遍历 ,就那么几个:前序、中序、后序、层序。而序列化只不过就是 在遍历到

    2024年02月10日
    浏览(53)
  • 安卓数据存储补充:XML序列化

    序列化是将对象状态转换为可保存或传输的格式的过程。我们可以把对象序列化为不同的格式,比如说:JSon序列化、XML序列化、二进制序列化等等,不同的形式适应不同的业务需求。 把对象的成员变量转化为XML格式,需要使用Xml序列化器(XmlSerializer类),序列化之后的对象

    2024年02月10日
    浏览(83)
  • python序列化和结构化数据详解

    序列化和结构化数据是计算机程序中非常重要的概念,它们的原理和应用在许多应用程序中都是必不可少的。Python作为一种高级编程语言,在序列化和结构化数据方面提供了很多优秀的解决方案。在本文中,我们将详细介绍Python中序列化和结构化数据的相关概念和应用。 1.

    2024年02月08日
    浏览(61)
  • spark 数据序列化和内存调优(翻译)

    由于大多数Spark计算的内存性质,Spark程序可能会被集群中的任何资源瓶颈:CPU、网络带宽或内存。大多数情况下,如果数据能放在内存,瓶颈是网络带宽,但有时,您还需要进行一些调整,例如以序列化形式存储RDD,以减少内存使用。本指南将涵盖两个主要主题:数据序列化

    2024年03月11日
    浏览(51)
  • 数据序列化工具Protobuf编码&避坑指南

    先简单介绍一下 Protocol Buffers(protobuf),它是 Google 开发的一种数据序列化协议(与 XML、JSON 类似)。它具有很多优点,但也有一些需要注意的缺点: 优点: 效率高 :Protobuf 以二进制格式存储数据,比如 XML 和 JSON 等文本格式更紧凑,也更快。序列化和反序列化的速度也很

    2024年02月13日
    浏览(43)
  • 4.4 C++ Boost 数据集序列化库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开

    2024年02月12日
    浏览(39)
  • web应用模式、API接口、接口测试工具postman、如何在浏览器中测试、restful规范、序列化反序列化、基于Django原生编写五个接口、drf介绍和快速使用、drf之APIView源码分析

    目录 一、web应用模式 二、API接口 三、接口测试工具postman postman介绍 postman下载与使用 四、如何在浏览器中测试 五、restful规范(重要) 六、序列化反序列化 七、基于Django原生编写五个接口 八、drf介绍和快速使用 概念 特点(了解一下) 安装 使用drf编写五个接口 九、drf之API

    2024年02月05日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包