実行可能ファイルの 1 つによって公開される複数のサービスを定義するために、Apache thrift (この場合は Windows) を使用します。通常、1 つのサービス インターフェイスを新しいメソッドで拡張することになります。そうしないと、新しく定義された「thrift サービス」にサービスを提供するために、新しいスレッド (少なくとも 1 つ) を作成する必要があります。
thrift で同じ基になるスレッドを使用して複数のthriftサービス定義を処理する方法はありますか?
実行可能ファイルの 1 つによって公開される複数のサービスを定義するために、Apache thrift (この場合は Windows) を使用します。通常、1 つのサービス インターフェイスを新しいメソッドで拡張することになります。そうしないと、新しく定義された「thrift サービス」にサービスを提供するために、新しいスレッド (少なくとも 1 つ) を作成する必要があります。
thrift で同じ基になるスレッドを使用して複数のthriftサービス定義を処理する方法はありますか?
0.9.x 以降、Thrift は一部の言語の多重化プロトコルをサポートしています。それ以来、残りの言語に対していくつかの実装が追加されました。
いつものように、たどる道は非常に似ています。トランスポート スタックの両側にTMultiplexedProtocolを追加します。コードベースにはいくつかの例もあります。
これに伴ういくつかの影響があります。
は階層化されたプロトコルであるためTMultiplexedProtocol
、すべてのサービスが同じエンドポイント プロトコル (バイナリなど) とトランスポート (ソケットなど) を共有します。ほとんどの場合、これはまさにあなたが望むものです。別のトランスポートまたはエンドポイント プロトコルが必要な場合でも、別のサービスをセットアップする必要があります。
サーバーを多重化されたサーバーに置き換えることは理論的には可能ですが、まだすべての言語で完全に実装されているわけではありません。以下を参照してください。詳細はTHRIFT-1915にあります。
互換性について: 新しい多重化では区切り文字が使用されます。既存のコードは、名前に区切り文字が見つからない場合に呼び出されるデフォルト サービス (古い多重化されていないサービス) が存在するような方法で変更できます。デフォルトが null または空の場合、コードは実際のソリューションと同じように動作します。
選択した言語に対してこの比較的単純な変更が必要で、パッチを提供したい場合は、喜んでレビューして統合します。