1

文件my_protocol.proto

Message MyProtocol {
    required int32 protocolId = 1;
    required **unknownType** protocolBody = 2; 
}

我想根据protocolId解析protocolBody。

例如,

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

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

4

2 回答 2

0

你可以伪造它,但它会很尴尬。您必须使用可选字段,并使用标志指示哪个字段存在。确保仔细检查您的接收者代码中是否设置了该字段:

Message OneOfManyTypes {
    required int32 kind = 1;
    optional MessageType1 ty1 = 2;
    optional MessageType2 ty2 = 3;
    ...
}
于 2013-05-02T06:00:22.270 回答
0

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

你可以留言

Message MyProtocolGetId {
    required int32 protocolId = 1;
}

解析然后使用正确的消息 ID 重新解析。或者,可以将 ProtocolBody 存储为字节并单独传递

于 2013-05-02T05:47:05.643 回答