gpt4 book ai didi

c++ - Protocol Buffers - 读取所有消息通用的 header (嵌套消息)

转载 作者:可可西里 更新时间:2023-11-01 18:36:05 24 4
gpt4 key购买 nike

我目前正在评估 Protocol Buffers 在一个项目中的使用(目前还没有编写代码)。我不清楚的一件事是您将如何阅读编码消息的一部分,例如说我有一个通用 header :

message Header {
required uint16 msg_type = 1;
required uint16 length = 2;
}

假设我将多条不同的消息传送到一个队列。消费者将如何计算出每条消息要读取多少数据以及应该构造哪种消息类型?

最佳答案

这里不需要Header消息;最常见的方法是遵循“流媒体”建议 from here .在其中,您可以将其视为一系列相同的 union type。消息,或者(我的偏好)在编写时,而不是仅仅在每个消息之前写一个长度前缀,包括一个指示消息类型的 varint then 长度(作为 varint)。指示消息类型的数字是您发明的任意映射,因此 1 = Foo、2 = Bar、3 = Blap 等)。如果您将消息类型左移 3 位,然后“或”2,那么它也将是一个格式良好的 protobuf 流本身,与 repeated YourUnionType .

基本上,这与 this answer 完全相同,但不是每次都成为字段 1,而是数字因消息类型而异。大多数实现都有一个读取器/写入器 API,可以读取和写入原始 varint,并对读取器 API 进行长度限制。一些实现具有帮助机制来直接支持异构消息流(基本上,为您完成上述所有操作)。

关于c++ - Protocol Buffers - 读取所有消息通用的 header (嵌套消息),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13362712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com