3

重複の可能性:
言語/オペレーティング システム間のプロセス間通信

Java と C++ プロセス間でプロセス間通信を行う必要があります。どちらも異なるプロセスであるため、JNI を使用できません。ソケット通信を使おうと思っているのですが、ソケット通信以外に解決策はありますか?どっちが速くて上手い?

4

3 に答える 3

6

一般に、次の可能性があります(さらに多くの可能性がありますが、これらは「人気のある」ものです)。

  • 標準の入力および出力チャネル。(+)実装が簡単(+)高速(+)デバッグが簡単(-)すでに実行中のプロセスにアタッチ/デタッチできない/

  • 名前付きパイプ。(+)高速(-)システム依存

  • IPCシステム(DBusなど)。(-)システムに依存

  • TCPソケット通信。(-)低速ですが、十分に高速である必要があります(+)リモート通信に簡単に拡張できます(+)デバッグが簡単です(-)アプリケーション間または同じアプリケーションのインスタンス間でTCPポートの競合が発生する可能性があります。

個人的には、ソースコードをほとんど変更せずにリモート接続できる可能性があるため、TCPソケット通信を使用したいと思います。ただし、同じマシンで同じポートを2回使用しないように注意する必要があります。これは、不可能です。すでにご存知かもしれませんが、2番目のインスタンスはポートでのリッスンに失敗します。考えられる回避策は、ポート範囲を使用することです。

于 2013-01-23T18:37:27.043 に答える
0

そこに利用可能な多くのIPCメソッドがあり、どれを本当にやりたいかに依存するものを選択します

  1. ファイル:おそらく実装が最も簡単なファイルです。同期やダーティリードなどに注意する必要があるのはあなただけです。
  2. 信号:私はそれについてほとんどできませんが、それはおそらく高速通信方法であり、実装するのはより複雑だと思います
  3. ネットワーク:私のお気に入りの方法です。新しいプロセス/ノードはそれぞれ、spwan時に新しいポートを開きます。より良い代替方法は、1つのプロセス内で多くの「ノードレット」を起動するrosノードレットと同様のメカニズムを使用することです。これは高速な方法ですが、リアルタイムではありません

それ以外には、セマフォや共有メモリ、パイプなどがありますが、これらはどれも理解と実装が簡単ではありませんが、OSレベルでもそのためのライブラリがいくつかあるはずです。

于 2013-01-23T18:38:32.300 に答える
0

ZeroMQを見たことがありますか、それとも私にとってより魅力的に見えるCrossroads I/Oですか?

于 2013-01-23T18:36:57.967 に答える