我正在尝试在网络程序中使用 Google 的协议缓冲区(protobuf)和 Python,使用裸套接字。我的问题是:发送方发送消息后,接收方如何知道发送了什么样的消息?例如,假设我有消息定义:
message StrMessage {
required string str = 1;
}
message IntMessage {
required int32 num = 1;
}
现在,发送器生成 a StrMessage
,对其进行序列化,并通过网络发送序列化的字节。接收者如何知道使用 StrMessage 而不是 IntMessage 反序列化字节?我试过做两件事:
// Proposal 1: send one byte header to indicate type
enum MessageType {
STR_MESSAGE = 1;
INT_MESSAGE = 2;
}
// Proposal 2: use a wrapper message
message Packet {
optional StrMessage m_str = 1;
optional IntMessage m_int = 2;
}
不过,这些看起来都不是很干净,而且都需要我手动列出所有的消息类型。有没有规范/更好的方法来处理这个问题?
谢谢!