fyh*_*ang 6 python sockets networking protocol-buffers
我正试图在网络程序中使用Google的协议缓冲区(protobuf),使用裸套接字.我的问题是:在发送方发送消息后,接收方如何知道发送了什么类型的消息?例如,假设我有消息定义:
message StrMessage {
required string str = 1;
}
message IntMessage {
required int32 num = 1;
}
Run Code Online (Sandbox Code Playgroud)
现在,发送器对其进行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;
}
Run Code Online (Sandbox Code Playgroud)
但是,这些似乎都不是很干净,并且都要求我手动列出所有消息类型.是否有规范/更好的方法来处理这个问题?
谢谢!
这已被讨论过,例如在protobuf的列表在此线程,而只是有是这样做的不规范/事实上的方式.
就个人而言,我喜欢这种Packet
方法,因为它保持一切都是自包含的(事实上,在protobuf-net中,我有特定的方法来处理该格式的数据,只返回StrMessage
/ IntMessage
,将该Packet
层留作一个从未实际获得的不重要的实现细节虽然Kenton先前的提案从未得到实施(AFAIK),但这完全取决于个人品味.
归档时间: |
|
查看次数: |
3422 次 |
最近记录: |