【发布时间】:2012-07-19 09:52:28
【问题描述】:
这是我想要弄清楚的,他们的文档解释得不够好,至少对我来说是这样。
塞纳里奥:
我有 5 个使用 protoc for C++ 生成的 proto 文件。我的应用程序需要接收一条消息,然后能够遍历所有字段,同时访问它们的值和名称。
我想做的是将消息解析到 DynamicMessage 类中,然后通过字段进行迭代。这样我就不必确切知道它是什么消息,我可以用一种通用的方式处理它们。
我知道可以通过将消息解析为特定类型然后将它们视为消息基类来处理消息,但对于我的应用程序来说这是不可取的。
看起来我想做的事情应该可以通过“--descriptor_set_out”和动态消息类来实现。
我尝试了什么(失败了):
我将descriptor.proto 与我的protos 一起移动到文件夹中,并将其与我的其他人一起包含在编译步骤中。我还设置了 --descriptor_set_out 标志以打印到文件“my_descriptors.pb.ds”
我不知道从那里开始。
Here's what i've referenced, although there isn't much... 很抱歉这篇文章很长,而且主题命名模式有些模糊。
另外,如果不清楚,我假设这些消息不是“未知”。我认为仍然需要为每个原型包含相应的标头,以便我的代码知道它处理的“未知”消息。
【问题讨论】:
-
一个问题 - 你为什么要这样做?如果您将消息描述(名称和类型 - 需要能够遍历字段名称)与消息本身一起传输,那么您基本上取消了非自我描述的性能和大小奖励消息(protobuf 是)。你可以只使用 JSON。
-
@DarkWander,我的用法是为了提高效率,我有一个二进制消息,它流经一些 pub 子进程。我有另一个进程,我想坐下来收听流经 pub 子进程的所有消息。它可以包含解码消息所需的所有标头,然后我想将它们以可读的 KeyValue 字符串输出到日志文件中以用于审计/调试目的。我不想为我添加的每个新消息类型编写解码器/翻译器。只想将字节转储到正确的类型并一般地迭代字段。
标签: c++ protocol-buffers