重複の可能性:
言語/オペレーティング システム間のプロセス間通信
Java と C++ プロセス間でプロセス間通信を行う必要があります。どちらも異なるプロセスであるため、JNI を使用できません。ソケット通信を使おうと思っているのですが、ソケット通信以外に解決策はありますか?どっちが速くて上手い?
重複の可能性:
言語/オペレーティング システム間のプロセス間通信
Java と C++ プロセス間でプロセス間通信を行う必要があります。どちらも異なるプロセスであるため、JNI を使用できません。ソケット通信を使おうと思っているのですが、ソケット通信以外に解決策はありますか?どっちが速くて上手い?
一般に、次の可能性があります(さらに多くの可能性がありますが、これらは「人気のある」ものです)。
標準の入力および出力チャネル。(+)実装が簡単(+)高速(+)デバッグが簡単(-)すでに実行中のプロセスにアタッチ/デタッチできない/
名前付きパイプ。(+)高速(-)システム依存
IPCシステム(DBusなど)。(-)システムに依存
TCPソケット通信。(-)低速ですが、十分に高速である必要があります(+)リモート通信に簡単に拡張できます(+)デバッグが簡単です(-)アプリケーション間または同じアプリケーションのインスタンス間でTCPポートの競合が発生する可能性があります。
個人的には、ソースコードをほとんど変更せずにリモート接続できる可能性があるため、TCPソケット通信を使用したいと思います。ただし、同じマシンで同じポートを2回使用しないように注意する必要があります。これは、不可能です。すでにご存知かもしれませんが、2番目のインスタンスはポートでのリッスンに失敗します。考えられる回避策は、ポート範囲を使用することです。
そこに利用可能な多くのIPCメソッドがあり、どれを本当にやりたいかに依存するものを選択します
それ以外には、セマフォや共有メモリ、パイプなどがありますが、これらはどれも理解と実装が簡単ではありませんが、OSレベルでもそのためのライブラリがいくつかあるはずです。
ZeroMQを見たことがありますか、それとも私にとってより魅力的に見えるCrossroads I/Oですか?