2011-01-28 41 views
4

同じシステム上で動作するjava/C++/pythonプロセス間のIPCメカニズム(ショートメッセージの送信)を実装する必要があります。実装する1つの方法は、TCPプロトコルを使用してソケットを使用することです。これには、接続の維持および他の関連する活動が必要です。 代わりに、私は接続を必要としないUDPプロトコルを使用することを考えています。メッセージを送信できます。 私の質問は、同じマシン(IPC用)のUDPが同じ不利な点を持っているかどうかです(信頼性の低いパケット配信、故障パケットなど)。プロセス間通信のためのUDP

答えて

3

はい、まだ現実的ではありません。通信は名前付きパイプや共有メモリを使用しようと

編集:

あなたはMPI(Javaはよくサポートされていませんaltough ...)や、スリフトのようなものを考えられなかった、あなたのアプリケーションの要件を知っていますか? (http://thrift.apache.org/

+0

名前付きパイプはJavaで動作しません – madhu

+1

+1スリフトリンク – vz0

1

ローカルUDPはまだun unです信頼できるが、主な利点はUDPマルチキャストである。 1つのデータパブリッシャと多数のデータサブスクライバを持つことができます。カーネルは、各サブスクライバにデータグラムのコピーを配布します。

一方、Unixローカルデータグラムソケットは、信頼性が要求されますが、マルチキャストをサポートしていません。

+0

申し訳ありませんが、これはわかりません。 UDPマルチキャストは平凡なUDPよりも信頼できると言っていますか?また、ループバックインターフェイス上でUDPマルチキャストを使用して、マシン境界にあるクロスプロセスpub/subを達成することをお勧めします。 – madhu

+0

UDPは、ユニキャスト、マルチキャスト、またはブロードキャストのいずれの場合でも信頼性がありません。ループバックインターフェイス上のマルチキャストに問題はありません。 –

+0

IPCでUDPが信頼できない理由を説明してください。ホストシステムを去ることは決してないので、輻輳やビットエラーなどの問題に直面してはいけません。なぜそれが信頼できないのですか? – Tahlil

0

ローカルUDPは、依然として信頼性が低く、ファイアウォールでブロックされることもあります。インタースレッド通信にローカルUDPを使用しているMsgConnect製品でこれに直面しました。 BTW MsgConnectは、ソケットを処理する必要がないようにタスクのオプションにすることができます。残念ながら、Pythonバインディングはありませんが、「ネイティブ」なC++実装とJava実装が存在します。

1

ローカルUDPは、ネットワーク上よりも信頼性が低く、50%+パケットの損失は信頼性がありません。それはひどい選択です、カーネルの開発者は、要求の不足に品質を帰属しています。

私は、メッセージを基にしたミドルウェアを調べることをお勧めします。これは、BSDソケット互換インタフェースを使用して、簡単に学習できるようにすることです。提案はZeroMQで、これにはC++、Java、Pythonバインディングが含まれています。

+0

私はZeromqを以前に評価しましたが、それは必要性に完全に合っています。しかし、java(jar)とC++(lib)の両方にライブラリの依存関係が必要です。私は、既存のAPIをjavaおよびC++で使用して同じものを実現したいと考えていました。また、UDPパケットの損失について質問したかったのですが、データや記事があるので、UDP通信が同じマシンで信頼できない理由をよく理解できます。 – madhu

+0

UDPを手渡すものは何もありません。ZeroMQ& JNIライブラリが必要ない場合は、独自のネイティブバージョンを作成してください。 –

+0

@ Steve-oローカルUDPはネットワーク上よりも信頼性が低いと説明できますか?ローカルネットワークに加えて、ローカルネットワークにはどのような障害がありますか? – Kumar

関連する問題