Windows OS環境におけるC++アプリとJavaアプリ間のプロセス間通信
質問
Windows 上に Java プロセスを開始する C++ アプリケーションがあります。これら 2 つのアプリは (XML のスニペットを介して) 相互に通信する必要があります。
どのプロセス間通信方法を選択しますか?またその理由は何ですか?
私たちが検討している方法は次のとおりです。共有ファイル、パイプ、ソケット (ただし、これにはセキュリティ上の懸念があると思います)。他の方法も受け入れます。
解決
ソケットベースの通信にセキュリティ上の懸念があると思う理由がわかりません(SSLを使用)。明確に定義された通信プロトコルがあることを前提として、言語に依存しないので、多くの場合非常に優れたアプローチです。 Googleの プロトコルバッファ をご覧ください。たとえば、必要なJavaクラスとストリームを生成します。
私の経験では、ファイルシステム(特にネットワークファイルシステム)はメッセージングに必ずしも調整されていないため、このような通信にはあまり適していません(キャッシュの問題によりファイルが選択されないことがありますたとえば、ターゲットプロセスごとに)。
もう1つのオプションは、メッセージングレイヤー( AMQ またはTibcoなど)ですこれには、設定するための管理オーバーヘッド(および専門知識)が大きくなる可能性があります。
個人的には、その柔軟性と単純さから、純粋なソケットのアプローチを選択します。 完全に制御されます。
他のヒント
C#とクロスプラットフォームのC ++アプリ間の通信に名前付きパイプを使用しましたが、良い結果しかありませんでした。ソケットを排除することは間違いなく進むべき方法です。
ソケットはいいですね。これらを使用すると、各コンポーネントの周囲にブラックボックス テスト レイヤーを非常に簡単に作成したり、各コンポーネントを独自のマシン上で実行したりすることができます。
セキュリティは確かに懸念事項ですが、その重要性に応じて幅広い選択肢があります。SSL、カスタム ハンドシェイク、パスワードで保護されたログイン、ファイアウォールを使用してセキュリティを確保できます。
編集:お勧めできるものではありませんが、JNI を使用した共有メモリもあります。リストに載っていないので言及しておこうと思いました。
氷はとてもクールです:)