在运行中改变序列化的protobuf消息?

时间:2015-12-18 21:30:34

标签: go protocol-buffers

是否可以更改(追加,合并等)序列化的protobuf消息,而无需先解组?我正在使用golang/protobuf package

理想情况下,我希望有一个服务可以接收传入的序列化消息,即时附加一些字段,然后将消息传递给下一个类似中间件的服务 - 其中可以添加其他信息有效载荷,而不必经常解组和编组。

某些上下文:系统是实时的,所以我希望尽可能减少开销。

1 个答案:

答案 0 :(得分:1)

来自documentation on protocol buffers

  

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

     

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

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