如何设计可扩展的RPC协议

news/2024/11/14 14:32:15/文章来源:https://www.cnblogs.com/zawaludo/p/18335077

如何设计可扩展且向后兼容的RPC协议

为什么不直接用现成的HTTP协议?

RPC的职责是负责应用间的通信,所以性能要求相对更高。而HTTP协议的数据包相对于请求数据本身要大很多,有很多冗余内容(如换行回车等),会影响性能。另外HTTP协议是无状态的协议,每次请求都要重新建立连接。因此对于要求高性能的RPC来说,HTTP协议很难满足要求。

怎样设计一个私有RPC协议?

最简单的协议数据格式

最简单的协议数据格式就是数据长度+数据体,接收方先读一个固定长度的值作为数据长度,然后根据这个长度继续读取对应长度的数据作为数据体。

改进的协议数据格式

使用数据长度+数据体方式只能用来断句,给接收的数据分段,并不能知道数据体中的数据是使用什么序列化方式。因此需要将序列化方式单独拿出来,类似数据长度那样用固定的长度存放,除了序列化方式之外还有其他的参数需要使用固定长度存放,把这些需要固定长度存放的参数统称为协议头。而数据体的长度是可变的。

在协议头中,除了放数据长度,序列化方式,还会放一些协议标识、消息ID、消息类型等参数,而协议体一般只放请求接口方法、请求的业务参数和一些扩展属性。

但是这样的协议还存在一个问题,不可扩展,因为协议头是定长的,如果后面想加入新的参数,就会导致兼容问题。

可扩展的协议

为了保证能平滑地升级改造已有地协议,需要设计一种可扩展地协议。其关键在于让协议头可扩展,也就是说协议头的长度不是固定的。那么就需要一个固定长度的值去获取协议头的长度。整个协议就分成三部分内容:固定部分、协议头内容、协议体内容。前两部分还是可以统称为协议头,具体的协议如下:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DataX - [02] 安装部署

题记部分 一、安装部署 (1)下载DataX:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz(2)解压到合适的目录:tar -zxvf datax.tar.gz -C /home/ecs-user/module/(3)进入b…

部署STONE-CRM中小企业的客户关系管理系统

Gitee地址 https://gitee.com/xpliu2166/stone-crm?skip_mobile=true环境查看# cat /etc/redhat-release Rocky Linux release 9.3 (Blue Onyx) # uname -a Linux Rocky9StoneCrm003080 5.14.0-362.18.1.el9_3.0.1.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Feb 11 13:49:23 UTC 20…

全新小体积RK3562核心板,解锁神秘技能!

RK3562小体积金手指系列核心板基于瑞芯微四核Cortex-A53+Cortex-M0处理器设计,工作主频高达2GHz,最高搭载4GB高速LPDDR4、32GB eMMC。该核心板拥有204 Pin脚,尺寸仅为67.6mm *45mm,支持千兆网、USB3.0、串口、PCIE、HDMI等丰富外设资源,非常适合于高性能、高性价比的工业应…

H7-TOOL自制Flash读写保护算法系列,为STM32H7全系列芯片制作读写使能和解除算法,支持在线烧录和脱机烧录使用(2024-07-30)

说明:很多IC厂家仅发布了内部Flash算法文件,并没有提供读写保护算法文件,也就是选项字节算法文件,需要我们制作。 实际上当前已经发布的TOOL版本,已经自制很多了。但是依然有些厂家还没自制,所以陆续开始为这些厂家提供读写保护支持。 最近好几个网友咨询H7系列芯片保护支…

H7-TOOL自制Flash读写保护算法系列,为国民技术N32G031制作读写使能和解除算法,支持在线烧录和脱机烧录使用(2024-07-29)

说明: 很多IC厂家仅发布了内部Flash算法文件,并没有提供读写保护算法文件,也就是选项字节算法文件,需要我们制作。 实际上当前已经发布的TOOL版本,已经自制很多了。但是依然有些厂家还没自制,所以陆续开始为这些厂家提供读写保护支持。 实现效果: 本次添加国民技术的N32G…

DNS在架构中的使用

1 介绍 DNS(Domain Name System,域名系统)是一种服务,它是域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串。 简单来说,DNS就是一个将我们输入的网址(比如www.baidu.com )转换成对应的IP地址(比如19…

RPC核心原理

什么是RPC RPC就是远程过程调用 RPC的作用屏蔽远程调用和本地调用的区别,让我们感觉就是调用本地项目内的方法。 隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。RPC通信流程 一个完整的RPC会涉及哪些步骤呢? 在调用方程序中,RPC框架根据调用的服务接口提前生成动态代理…

零代码GIS视效升级!一键添加环境效果,支持多种GIS影像协议

在当今的三维GIS领域,如何轻松实现视效升级?这款免费可视化工具——山海鲸可视化,可以给你提供零代码解决方案。山海鲸可视化从三维GIS需求出发,带来了一键添加环境效果的强大功能,显著提升视觉效果。无论是体积云、体积雾还是其他天气效果,只需简单操作,即可呈现逼真环…

springboot自学(5)自定义starter

测试文件可以删除掉了,配置文件改一下后缀修改pom业务代码开发添加自动配置类,并且加上spring.factories到此为止就初步完成了,install到本地的maven仓库然后在使用的项目里加上依赖就行了导入项目,并调用定时任务报表开发 先做个表格的打印方法表格右对齐的方式左对齐的方…

C#营业执照识别接口、营业执照ocr

营业执照识别接口,是基于光学字符识别技术的一种将图像中的字符转化为可编辑文本的技术。翔云营业执照识别接口,自主ocr核心技术,可快速精准识别营业执照上的全部字段信息,支持三证合一版营业执照和五证合一版营业执照。翔云营业执照识别接口提供免费测试体验服务,助力企业…

C#银行卡ocr识别接口的简单集成方式

银行卡识别接口是指:以文字识别技术为基础衍生的银行卡卡面信息识别接口,该接口可以快速、精准的将银行卡卡面上包含银行卡号、卡类型、银行名称等文字信息提取成功,以帮助需要支付的平台进行银行卡身份的快速核验。企业又该如何快速的对银行卡识别接口进行集成?可以选择翔…