12

単一のJVMアプリ(1つのプロセス、場合によっては複数のスレッド)とC++dllにリンクされたネイティブC++アプリケーションの間に堅牢なIPCソリューションを実装したいと思います。dllは、同じ物理マシン上にある場合とない場合があります。そうするための最良のアプローチは何ですか?

どんな提案でも大歓迎です!ありがとう!

4

4 に答える 4

9

私は標準のTCP/IPソケットを使用します。この場合、アプリはあるポートでリッスンし、ライブラリはそれに接続して、報告する必要があるものを報告し、回答を期待します。

抽象化は堅牢で、十分にサポートされており、相互運用の問題はありません。

于 2008-10-03T06:59:14.577 に答える
4

FacebookのThriftフレームワークを検討しましたか?

Thriftは、スケーラブルなクロスランゲージサービス開発のためのソフトウェアフレームワークです。ソフトウェアスタックとコード生成エンジンを組み合わせて、C ++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk、OCamlの間で効率的かつシームレスに機能するサービスを構築します。

Thriftを使用すると、単純な定義ファイルでデータ型とサービスインターフェイスを定義できます。そのファイルを入力として、コンパイラは、プログラミング言語間でシームレスに通信するRPCクライアントとサーバーを簡単に構築するために使用されるコードを生成します。

TCPソケット上で機能し、シリアル化/逆シリアル化はすでに組み込まれています。

詳細については、ホワイトペーパーをお読みください。

于 2008-10-03T06:59:51.380 に答える
4

Google プロトコル バッファは、言語とプラットフォームに依存しない方法でデータをシリアル化するのに役立ちます。また、シリアル化されたデータの読み取りと書き込みを処理するコードを Java および C++ で生成します。その後、データを送信する任意の通信メカニズムを使用できます。たとえば、TCP ソケットまたは共有メモリ IPC 経由で送信できます。

于 2009-01-24T08:47:32.173 に答える
0

うーん - DLL はプロセスではないので、Java アプリと DLL にリンクされている他のネイティブ アプリケーションとの間の IPC を意味していると思います。確かに、ソケットはここに行く方法です。それはあなたにとってすべてをより簡単にします。

もう 1 つのオプションは、JNI を使用して DCOM 実装と通信することですが、(COM と JNI の頭痛の種に対処する必要があることを除いて :-) )、多くのメリットはないと思います。

于 2008-10-04T02:52:01.040 に答える