5

したがって、この例は次のとおりです。

私はメッセージタイプを持っています。サーバーA->B->C間で受け渡されます。ここで、いくつかの新しいフィールド/IDを持つバージョン2.0のメッセージが作成されたとします。サーバーAとCはこの新しい形式を認識していますが、サーバーBはまだ古い形式を使用しています。すべてのサーバーは、メッセージを逆シリアル化し、検査し、シリアル化し、送信します。Aがすべてのフィールド(メッセージのV1.0とV2.0の両方)に入力していると仮定すると、CにはメッセージV2.0の入力されたフィールドが表示されますか?

私はプロトコルバッファがこれをサポートしていることを知っています。Thriftもそれをサポートしているかどうか知りたかった。(私がC#で行った簡単なテストでは、答えはノーですが、みんなに確認したかっただけです)

メッセージコードの例として、ここではIDLについて説明します。

struct Message { // V1.0
  1: i64 Id;
}

struct Message { // V2.0
  1: i64 Id;
  2: string Content;
}

サーバーCは、Aに入力されたMessage.Contentを認識しますか?

4

1 に答える 1

1

答えはノーです。

プロトコル バッファに関しては、ドキュメントによると、生成されたコードの Python バージョンがこれをサポートしていないことに注意することも重要です。

https://developers.google.com/protocol-buffers/docs/encoding#order - 「メッセージに不明なフィールドがある場合、現在の Java および C++ の実装では、既知のフィールドが順番に並べられた後に、それらを任意の順序で書き込みます。現在の Python実装は不明なフィールドを追跡しません。」

于 2013-01-13T17:59:30.420 に答える