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

目录

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

序列化与反序列化

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

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

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

    1. 实现接口Record

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

    1. 创建BinaryOutputArchive

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

通信协议

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

请求协议:

在这里插入图片描述

响应协议:

在这里插入图片描述

请求头的数据结构

在这里插入图片描述

响应头的数据结构

在这里插入图片描述

对于请求体与响应体,不同的请求体和响应体的数据结构是不同的,可以参考/zookeeper-jute/target/generated-sources/java/org/apache/zookeeper/proto该目录下的类。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/63817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

红队钓鱼技术之自解压钓鱼木马

简介 对于使用自解压文件的场景,攻击者可以创建一个自解压的exe文件,该文件解压后自动执行解压出来的文件。然后,通过插入RLO字符,将这个exe文件伪装成另一种看似安全的文件类型,比如文本文件或图片文件。当用户打开这…

decimal类型在MySQL中的正确使用 (长度和小数点)

1. MySQL(decimal) 对应 Java(BigDecimal) 2. decimal(16,2) MySQL中类型的设置, 长度16, 保留2位小数 3. 如果长度小于14, 则会出现没小数位的情况

Mybatis异常Invalid bound statement (not found)原因之Mapper文件配置不匹配

模拟登录操作 $.post("/admin/login", {aname, pwd }, rt > {if (rt.code 200) {location.href "manager/index.html";return;}alert(rt.msg)});网页提示服务器代码错误 POST http://localhost:8888/admin/login 500后端显示无法找到Mapper中对应的…

基于EIoT能源物联网的工厂智能照明系统应用改造-安科瑞黄安南

【摘要】:随着物联网技术的发展,许多场所针对照明合理应用物联网照明系统,照明作为工厂的重要能耗之一,工厂的照明智能化控制,如何优化控制、提高能源的利用率,达到节约能源的目的。将互联网的技术应用到工…

手机便签内容不见了怎么恢复正常?

在日常生活和工作中,很多人都需要随手记录事情,例如家庭琐事、孩子相关的事情、指定时间需要完成的工作任务、会议安排等。当我们需要随时随地记录事情的时候,手机便签应用就是非常不多的选择,我们直接打开手机上的便签APP就可以新…

爬虫009_字符串高级_替换_去空格_分割_取长度_统计字符_间隔插入---python工作笔记028

然后再来看字符串的高级操作 取长度 查找字符串下标位置 判断是否以某个字符,开头结尾 计算字符出现次数 替换

一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)

概念与功能: webpack是前端项目工程化的具体解决方案。它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。 快速上手:隔行变色 -S实际是--save的简写,表示安装的第三方…

0基础学习VR全景平台篇 第79篇:全景相机-泰科易如何直播推流

泰科易科技是中国的一家研发全景相机的高科技公司,前不久,在2020世界VR产业大会上发布了新一代5G VR直播影像采集终端--360starlight。以其出色的夜景成像效果和一“部”到位的直播方案重新定义了VR慢直播相机,对行业具有高度借鉴意义。 本文…

嵌入式开发学习(STC51-18-LCD液晶显示)

内容 在LCD1602液晶上显示字符信息; LCD1602介绍 简介 1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符; 它是一种专门用来显示字母、数字、符号的点阵型液晶模块; 它是由若干个5x7或者5x…

嵌入式学习之震动喇叭项目

震动喇叭项目所用到的元器件有振动传感器模块、继电器模块、高功率喇叭、433M无线发射接收模块,通过这些模块,能够实现做出一个智能报警系统的项目出来,非常的有趣,特别是喇叭声音想起来,那个声音挺大的。 继电器的学…

【Java从0到1学习】06 Java 面向对象

1. 面向对象思想 面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。 提到…

RocketMQ 主备自动切换模式部署

目录 主备自动切换模式部署 Controller 部署​ Controller 嵌入 NameServer 部署​ Controller 独立部署​ Broker 部署​ 兼容性​ 升级注意事项​ 主备自动切换模式部署 该文档主要介绍如何部署支持自动主从切换的 RocketMQ 集群,其架构如上图所示&#xff…

Spring Boot数据访问基础知识与JDBC简单实现

目录 Spring Boot数据访问基础知识 Spring Data ORM JDBC JPA JDBC简单实现 步骤1:新建Maven项目,添加依赖 步骤2:配置数据源—让程序可以访问到 步骤3:配置数据源—让IDEA可以访问到 步骤4:添加数据库和表 …

【网络编程·传输层】UDP和TCP的报头

目录 一、端口号划分 二、部分指令 1、pidof(用于查看进程id) 2、netstat(查看网络状态) 三、UDP协议 1、UDP协议格式 2、UDP协议如何进行封装、解包、分用 2.1封装、解包 2.2分用 3、UDP协议的特点 3.1UDP协议的特点 …

CMake 3.13.4 or higher is required. You are running version 3.10.2

ubuntu 安装 cmake,但是apt安装的版本太低,需要其他安装方法。 参考视频 https://www.youtube.com/watch?v_yFPO1ofyF0 以下是对视频内容的提炼,就两点 1、下载需要版本的sh文件;2、安装 一、下载需要版本的sh文件 https://cma…

什么是GCC

GCC(GNU Compiler Collection,GNU编译器套件)是由 GNU 开发的编程语言译器。GNU 编译器套件包括 C、C、Objective-C、Java、Ada 和 Go 语言前端,也包括了这些语言的库(如 libstdc,libgcj等) GC…

【gavh39芯片用什么代替-AH8652】

问:gavh39芯片用什么代替? 答:gavh39是一颗用于交流220v转5v输出的芯片,它的拼对拼代替型号为AH8652 AH8652是一款非隔离电源管理芯片,它用于将交流电压转换为直流电压输出。可以将输入的220V交流电转换为输出的5V直流…

MySQL存储过程(二十四)

你相信吗, 相信那一天的夕阳吗? 上一章简单介绍了 MySQL的索引(二十三),如果没有看过,请观看上一章 一. 存储过程 MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起, 应用程序无须关注存储过程和函数内部复杂的S…

积累常见的有针对性的python面试题---python面试题001

1.考点列表的.remove方法的参数是传入的对应的元素的值,而不是下标 然后再看remove这里,注意这个是,删除写的那个值,比如这里写3,就是删除3, 而不是下标. remove不是下标删除,而是内容删除. 2.元组操作,元组不支持修改,某个下标的内容 可以问他如何修改元组的某个元素 3.…

将整数,结构体,结构体数组,链表写到文件

在之前的学习中,忘文件中写的内容都是字符串或字符,本节学习如何写入其他各种类型的数据。 回看write和read函数的形式: ssize_t write(int fd, const void *buf, size_t count); ssize_t read(int fd, void *buf, size_t count); 其中&a…