Protocol buffers Protobuf能否动态解析字段?

Protocol buffers Protobuf能否动态解析字段?,protocol-buffers,Protocol Buffers,文件my_protocol.proto: 我想根据protocolId解析protocolBody 比如说, protocolId=10001表示一个登录事件,那么protocolBody应该是一条登录消息,可以由login.proto解析 我不知道应该在未知类型上设置哪种类型。协议缓冲区一次性解析整个消息 你可以留个口信 Message MyProtocolGetId { required int32 protocolId = 1; } 解析,然后使用正确的消息id重新分析。或者,协

文件my_protocol.proto:

我想根据protocolId解析protocolBody

比如说,

protocolId=10001表示一个登录事件,那么protocolBody应该是一条登录消息,可以由login.proto解析


我不知道应该在未知类型上设置哪种类型。

协议缓冲区一次性解析整个消息

你可以留个口信

Message MyProtocolGetId {
    required int32 protocolId = 1;
}

解析,然后使用正确的消息id重新分析。或者,协议体可以存储为字节并单独传递

您可以伪造它,但这会很尴尬。您必须使用可选字段,并使用标志指示哪一个字段(如果存在)。确保再次检查接收机代码中是否设置了该字段:

Message OneOfManyTypes {
    required int32 kind = 1;
    optional MessageType1 ty1 = 2;
    optional MessageType2 ty2 = 3;
    ...
}

非常感谢。似乎没有必要使用protobuf发送protocolId。我想直接发送protocolId。
Message OneOfManyTypes {
    required int32 kind = 1;
    optional MessageType1 ty1 = 2;
    optional MessageType2 ty2 = 3;
    ...
}