论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
gRPC编译与字段编号的细节探讨
gRPC编译与字段编号的细节探讨
灌篮少年
金牌会员
|
2025-1-2 09:47:02
|
显示全部楼层
|
阅读模式
楼主
主题
831
|
帖子
831
|
积分
2493
上次我们专门通过一个简朴的HelloWorld示例来了解了gRPC的基本概念和使用方法。本日,我们将继承深入探讨gRPC,重点讨论一些在实际应用中须要特别注意的要点。实际上,gRPC的核心目标是简化远程调用的过程,它通过定义清晰的接口,利用Protocol Buffers(简称proto协议)来天生不同编程语言的接口代码,从而实现跨语言、高效的通讯。
在回首了gRPC的基本工作原理之后,我们本日将进一步扩展视野,继承探讨一些更细节的部分。
gRPC
是否会覆盖
本日,我特别添加了一个新的测试接口,目的是测试在举行重新编译时,系统是否会丢失之前定义的接口和相干业务逻辑。为了简化说明,实体类部分就不再重新编写了,它与之前定义的内容完全同等。详细细节请见下图:
在我重新举行编译后,我发现除了这个特定的类须要单独手动编写之外,其他的内容都已经主动天生完毕。这意味着,我们不须要担心会因编译过程而导致已有内容被直接覆盖掉。
实际上,Maven 工具本身也可以设置,以控制在执行时是否删除目录中的某些内容并重新天生。虽然这里不作详细讨论,但从正常业务操纵的角度来看,我们通常都不盼望本身辛苦编写的代码在没有任何警告的情况下,因他人的误操纵或一键执行而被完全删除。
字段编号有何用
在我们讨论实体类消息体中为何会出现数字时,首先要明白的是,虽然我们在定义字段时已经给它们起了详细的名字,但这远不敷。特别是在使用 gRPC 举行服务通讯时,你须要从传统的 JSON 格式(键值对结构)中跳脱出来,重新理解字段的表示方式。
在 gRPC 中,数据是通过 Protocol Buffers(Protobuf) 举行序列化和传输的,而 Protobuf 的一个关键概念就是 字段编号(Field Numbers)。如图所示:
其实作用最主要的就是序列化和反序列化,当 Protobuf 序列化消息时,它并不直接存储字段名(如 name、age 等),而是存储字段编号和字段值的对应关系。如许,这使得数据传输时比使用 JSON 或 XML 更加紧凑。
我们简朴看下后台输出的日志,你大概就能理解了,如图所示:
我们把这些字节全拿出来看下。好比:
00 00 00 00
:这些是四个字节,通常是用来表示某个字段的填充数据,可能是某种标识符、长度或者预留字节。
07
:这个字节通常表示某种数据的长度或其他编码标识。
0a
:这个字节也有可能是长度或某种控制符号。
05
:又是一个字节,通常也表示控制信息。
57 6f 72 6c 64
:这些字节代表的是ASCII编码字符。它们对应的字符为:
57 → 'W'
6f → 'o'
72 → 'r'
6c → 'l'
64 → 'd'
因此,57 6f 72 6c 64 对应的字符串是 "World"。
同理,我们看下返回的数据也是一样的字节。然后反序列化成我们所须要的字段值,详细的我们就不探讨了。了解下他的优点即可。
这串字节 00000000150a137869616f79753a2048656c6c6f20576f726c64 可以被解释为:
一些前导字节(如 00 00 00 00 和 15 0a 13)可能是标识符、长度字段或者控制信息。
背面部分解码成了字符串 "xiaoyu: Hello World"
还有一个须要注意的就是,既然他有字段编号,所以你不要轻易去修改编号,就算不消了,也要去用新的编号举行标识处理。这是因为如果有老客户端仍在继承使用,会导致无法精确解析新版消息,会出现兼容性错误。
总结
通过本日的探讨,我们进一步加深了对gRPC和Protocol Buffers的理解,特别是在实际应用中可能碰到的一些细节和注意事项。我们了解了在重新编译时,系统如何主动天生接口代码并避免覆盖已有内容,从而减少了手动操纵的风险。同时,深入探讨了Protocol Buffers中的字段编号机制,它不仅有助于数据的高效序列化和传输,也在版本兼容性上起到了至关重要的作用。尽管字段名称对开发者来说更具可读性,但最终传输的数据依赖于字段编号,而对编号的管理和修改必须小心谨慎,以确保不同版本之间的兼容性。
盼望通过本日的讲解,大家能更好地理解gRPC的应用场景和实际操纵中的细节。
我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交换与分享,对开源社区布满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
灌篮少年
金牌会员
这个人很懒什么都没写!
楼主热帖
【靶场】THM-Pickle Rick-练习
【WinUI3】ListView / GridView 学习总 ...
SAP WM高阶之下架策略M(Small Large Qu ...
ClickHouse(03)ClickHouse怎么安装和部 ...
每日算法之二叉搜索树的后序遍历序列 ...
Arrya类常见方法学习
提高开发质量的 5 个必要实践 ...
教你用Python画个可爱的皮卡丘!(附完 ...
用C# + Winform 做一个简易的游戏设计 ...
【邂逅Django】——(一)创建项目 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表