为了账号安全,请及时绑定邮箱和手机立即绑定

即时更改序列化的 protobuf 消息?

即时更改序列化的 protobuf 消息?

qq_笑_17 2021-11-29 16:42:46
是否可以更改(追加、合并等)序列化protobuf消息而不必先对其进行解组?我正在使用golang/protobuf 包。理想情况下,我希望有一个服务可以接收传入的序列化消息,即时附加一些字段,然后将消息传递给下一个服务 - 有点像中间件,可以将附加信息添加到有效负载中,而无需必须不断地解组和编组。一些上下文:系统是实时的,所以我想尽可能减少开销。
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

协议缓冲区文档

如您所知,协议缓冲区消息是一系列键值对。消息的二进制版本仅使用字段的编号作为键——每个字段的名称和声明的类型只能在解码端通过引用消息类型的定义(即 .proto 文件)来确定。

对消息进行编码时,键和值将连接成一个字节流。当消息被解码时,解析器需要能够跳过它不识别的字段。这样,可以将新字段添加到消息中,而不会破坏不知道它们的旧程序。为此,有线格式消息中每一对的“密钥”实际上是两个值——您的 .proto 文件中的字段编号,加上一个提供足够信息来查找以下值长度的连线类型。

因此,要将字段附加到编码的协议缓冲区消息,您可以简单地将编码字段附加到字节流/切片的末尾。


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信