2

2 台のマシン間の専用イーサネット接続を介して、Windows で実行されている .NET アプリケーションから Linux で実行されている C++ アプリケーションにコマンドを発行する必要があるアプリケーションがあります。

私は独自のプロトコルを展開するよりも、標準的な形式の RPC を使用したいと考えています。以前はクロスプラットフォーム アプリケーションに XML RPC を使用していましたが、これらの特定のコマンドには多くの数値データ (コマンドごとに数千の倍精度浮動小数点値) を含める必要があり、コマンドが頻繁に送信されるため、何らかの方法を考えています。バイナリ シリアル化の方が適しています。そのため、プロトコル バッファの調査を開始しました。

それで、いくつか質問があります:

  1. Protocol Buffers がシリアライゼーション形式を定義していることは知っていますが、それらを使用してクロスプラットフォーム RPC を実行する方法について受け入れられている業界標準はありますか?
  2. Protocol Buffers は、ネストされたデータ構造を可変サイズの配列で表現するのに適していますか? コマンドごとのポイント数は可変であり、データの一部の最も自然な表現は、それぞれがポイントの配列を含む構造体の配列です。これらの配列はすべて、特定のコマンドに対して可変サイズになります。
  3. クロスプラットフォーム通信に Protocol Buffers を使用する際に遭遇した落とし穴はありますか?
4

1 に答える 1

3
  1. いいえ、一般的に受け入れられている標準はありません。一部のライブラリには独自の RPC 実装が付属していますが、どれも特に人気があるようには見えません。(編集: 2019 年現在、gRPCはかなり普及しています。)

  2. 私の意見ではかなり良いです。一部のライブラリでは、データの一部のみが必要な場合でも、ネストされた構造をすべてデコードする必要がないように、遅延デコードが可能です。

  3. RPC フォーマットが定義されていないことに加えて、メッセージのフレーミングも定義されていません。そのため、最初に長さフィールドを追加するなどのカスタム メソッドを実行する必要があります。もう 1 つの未定義の部分は、送信されるメッセージのタイプを識別する方法です。独自のプロジェクトでこれらを明確に定義してください。

于 2013-10-02T17:03:26.737 に答える