ベアソケットを使用して、ネットワークプログラムでPythonでGoogleのプロトコルバッファ(protobuf)を使用しようとしています。私の質問は、送信側がメッセージを送信した後、受信側はどのような種類のメッセージが送信されたかをどのように知るのかということです。たとえば、メッセージ定義があるとします。
message StrMessage {
required string str = 1;
}
message IntMessage {
required int32 num = 1;
}
これで、送信機はを作成してStrMessage
シリアル化し、シリアル化されたバイトをネットワーク経由で送信します。受信者は、IntMessageではなくStrMessageを使用してバイトを逆シリアル化することをどのように知っていますか?私は2つのことを試みました:
// 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;
}
ただし、どちらもあまりきれいではないようです。どちらの場合も、すべてのメッセージタイプを手動で一覧表示する必要があります。この問題を処理するための標準的/より良い方法はありますか?
ありがとう!