18

多くのアプリケーションを接続するために gRCP/Protobuf を使用するとします。それらのアプリケーションは、独自のチームで独自の速度で開発およびリリースされます。時間の経過とともに、定義されたインターフェイスで異なるバージョンを使用する、同じアプリの異なるバージョン (ユーザー PC にインストールされるデスクトップ アプリなど) が存在します。

Protobuf は下位互換性を確保するためのものですが、異なる時点で実行されているインターフェイスのバージョンを知る方法はありますか?

最も簡単な実装は、インターフェースのバージョンをアプリのバージョンと同じにすることです。しかし、多くの言語が使用されているため、それらすべてにアプリのバージョン管理を実装することは簡単ではありません。

では、どのようにインターフェイスをバージョン化し、サーバーにクライアントのバージョンを知らせますか?サーバーはログに記録できるはずだと思います

AppName v.version からの DATETIME 接続 [インターフェイス v.version を使用]

4

3 に答える 3

-1

プロトコル バッファ バージョン 2 を使用している場合は、デフォルト値を使用してこれを実装できます。Protocol buffers 3 はデフォルト値のサポートを削除したため、この回答はそこでは機能しません。

インターフェイスを定義する .proto ファイルには、次のようなものがあります。

message MyLoginMessage
{
    ... normal login fields ...

    // Increment this number when you make new releases
    // of this .proto.
    optional int32 protocol_version [default=55];
}

このようにして、すべてのクライアントが .proto から取得したバージョン番号を自動的に含めます。

編集: ああ、ちょうど proto3 タグに気付きました..だから、この答えはあなたにとって役に立たないと思います。

于 2016-11-10T13:01:18.923 に答える
-1

これを行う 1 つの方法は、次のようにカスタム オプションを追加し、そのオプションを .proto ファイルの先頭に設定することです。

option (my_app.version) = 3;

次に、各言語でそのオプションの値を調べ、それをバージョン番号として示すことができます。

于 2016-11-11T16:56:53.917 に答える