【问题标题】:Is it possible to send compiled protobuf message definition inside a protobuf?是否可以在 protobuf 中发送已编译的 protobuf 消息定义?
【发布时间】:2012-06-29 09:13:09
【问题描述】:

我想对我们使用的一些基于 protobuf 的服务的流量进行一些消息调试。

服务都使用已编译的 .proto 文件作为消息,我想将消息的实际格式序列化回 .proto 文件文本并将其发送给客户端,这样客户端就不需要知道实现细节在编译时。

这在 C++ 中可行吗?我知道我可以get the structure of a message without the definition,但是拥有消息字段的名称对于调试至关重要。在没有 .proto 文件的情况下,还有其他方法可以获取此信息吗?

谢谢!

【问题讨论】:

    标签: c++ protocol-buffers


    【解决方案1】:

    如果原始发件人有 .proto 文件,它们可以通过“protoc”编译成 protobuf 数据文件,匹配“descriptor.proto”(应该在您的 protobuf 发行版中可用) )。您可以使用

    protoc --descriptor_set_out={out_path} --proto_path={in_path}
    

    (或者如果您愿意,也可以到标准输出,IIRC - 未经测试)

    生成的二进制数据可以包含在bytes 字段中,并且只要客户端还具有从descriptor.proto 生成的对象模型,就可以单独反序列化。

    就反序列化后的操作而言:FileDescriptorSet 是顶级对象;您应该能够向下遍历到 FieldDescriptorProto,其中包含成员名称等

    也许不是很优雅,但它应该可以工作。

    或者,以任何方式包含元数据,并将所有内容视为扩展字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多