是否可以在protobuf中发送已编译的protobuf消息定义?

时间:2012-06-27 20:54:02

标签: c++ protocol-buffers

我想为我们使用的一些基于protobuf的服务做一些流量调试。

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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

执行此操作
protoc --descriptor_set_out={out_path} --proto_path={in_path}

(如果你愿意,可以选择stdout,IIRC - 未经测试)

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

就反序列化后的操作而言:FileDescriptorSet是顶级对象;你应该能够遍历到FieldDescriptorProto,它有会员名等

也许不是很优雅,但它应该有用。

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