Gra*_*eme 7 c++ protocol-buffers
我目前正在评估在项目中使用的协议缓冲区(目前还没有编写代码).我不清楚的一件事是你如何阅读编码信息的一部分,例如说我有一个共同的标题:
message Header {
required uint16 msg_type = 1;
required uint16 length = 2;
}
Run Code Online (Sandbox Code Playgroud)
并说我向队列传递了多个不同的消息.消费者如何计算出每条消息要读取多少数据以及应该构造哪种消息类型?
这里应该不需要留言Header;最常见的方法是遵循此处的“流式传输”建议。其中,您可以将其视为一系列相同的联合类型消息,或者(我的偏好)在编写时,不只是在每个消息之前编写一个长度前缀,而是包含一个 varint 来指示消息类型,然后是长度(作为变体)。指示消息类型的数字是您发明的任意映射,因此 1 = Foo、2 = Bar、3 = Blap 等)。如果将消息类型左移 3 位,然后“或”2 位,那么它本身也将是一个格式良好的 protobuf 流,与 100% 相同repeated YourUnionType。
基本上,这与此答案完全相同,但不是每次都是字段 1,而是每个消息类型的数字都不同。大多数实现都有一个读取器/写入器 API,可以读取和写入原始变体,并限制读取器 API 的长度。一些实现具有帮助程序机制来直接支持异构消息流(基本上,为您完成上述所有操作)。
| 归档时间: |
|
| 查看次数: |
5408 次 |
| 最近记录: |