在我现有的 ZeroMQ 应用程序中,正在播放以将我的有效负载更改为 google protobuf。在初始分析期间,我面临的问题是我将有多个原型(prototype)类,它们也可以写入日志文件。现在在运行时我如何确定收到哪个原型(prototype)。稍后如果我在这里阅读日志文件,我也会遇到同样的问题。有什么解决办法吗?在 proto2 和 proto3 中
最佳答案
Protocol Buffer 确实支持多个类定义。你这样做的方法是声明你在 Protocol Format 中拥有的所有类类型。文件。
在此示例中,我们声明了两个不同的类及其属性:
syntax = "proto2";
package tutorial;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
message House {
repeated string owner = 1;
}
如果您正在提示使用 Protocol Buffer 作为您的标准通信协议(protocol),我猜您想要发送其中一个类。请参阅官方文档,他们在 post 中解释了如何处理这种情况。 .
另一个好的模式是创建一个包含公共(public)属性和其中一个类的唯一消息 (Wrapper):
message WrapperMessage {
required int64 timestmap = 1;
oneof data {
Person person = 2;
House house = 3;
}
}
然后在解码类之前,您可以通过调用 HasField
检查包装器持有哪种类型的类。
注意:Protocol Buffers 3 基于 FileDescriptorSet
和 Any
属性为此目的实现了一项新功能。
关于c++ - 确定正确的 protobuf 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55577612/