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



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

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

这在C++可能吗?我知道我可以在没有定义的情况下获取消息的结构,但是拥有消息字段的名称对于调试至关重要。有没有另一种方法可以在没有 .proto 文件的情况下获取此信息?

谢谢!

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

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

(如果您愿意,也可以使用 stdout,IIRC - 未经测试)

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

关于反序列化后该怎么做:FileDescriptorSet是顶级对象;你应该能够向下遍历到 FieldDescriptorProto ,它有成员名等

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

或者,以任何方式

包含元数据,并将所有内容视为扩展字段。

最新更新