通信する必要のあるアプリケーションが2つあります。両方のアプリケーションが同じコンピューター上にあるため、名前付きパイプを使用して通信しています。
私の質問は、送信されるデータについてです。私のオプションは何ですか?次の可能性は実現可能ですか?
- 2つのアプリケーション間でバイトを送信
- CStructを送信する
- いくつかのプロトコルバッファオブジェクトを送信します
他に何かアイデアがあれば、私はオープンです。私の目的は、非常に迅速に実装できるものを用意することです。
通信する必要のあるアプリケーションが2つあります。両方のアプリケーションが同じコンピューター上にあるため、名前付きパイプを使用して通信しています。
私の質問は、送信されるデータについてです。私のオプションは何ですか?次の可能性は実現可能ですか?
他に何かアイデアがあれば、私はオープンです。私の目的は、非常に迅速に実装できるものを用意することです。
非常に高いパフォーマンスが必要な場合を除いて、ThriftやProtocolBufferなどの標準的なクロスランゲージサービス通信言語を使用します。
これにより、ある日別の言語で3番目のアプリケーションと通信する必要がある場合、または各サービスを別のマシンで実行することにした場合でも、問題なく拡張できます。
(あなたが)実装するのが本当に速いですか、それとも操作が本当に速いですか?
前者の場合-Webサービスを使用すると、gsoapまたはWCFを使用すると、呼び出すことができるシンプルなインターフェイスになります。
後者の場合は、おそらく共有メモリが必要です。生データをそこに入れて、他のプロセスがそれを読み取れるようにします。転送するデータがたくさんある場合は、これが最適な方法です。少量の場合は、名前付きパイプ(またはソケット、常に優れていて使いやすく、複数のマシンにはるかに簡単に移行できるソケット)を介して直接送信できます。
転送するデータを解釈するには、C#オブジェクトを送信しようとするのを忘れて、C ++側に同じオブジェクトとして読み込ませるので、生データを処理する必要があります。これは、ある形式でデータをシリアル化することを意味します(バイナリ形式もうまく機能し、たとえばXMLにシリアル化するよりもはるかに高速になります)。反対側はこれを読み込んで、独自のデータ構造にシリアル化を解除できます。
1つのオプション:トランスポートにはzeromqを使用し、通信言語としてprotobuf、thrift、さらにはjsonを使用します。Zeromqは本当に速いです。