2011-01-28 46 views
4

我必須在運行在同一系統上的java/C++/python進程之間實現IPC機制(發送短消息)。一種實現方法是使用TCP協議的套接字。這需要維護連接和其他相關活動。 相反,我正在考慮使用UDP協議,它不需要連接,我可以發送消息。 我的問題是,在同一臺機器上(對於IPC)UDP是否仍然具有相同的缺點,它適用於跨機器通信時(如不可靠的數據包傳輸,亂序數據包)用於進程間通信的UDP

回答

3

是的,仍然是不可實現的。通信嘗試使用命名管道或共享內存

編輯:

不知道你的應用程序的要求,你有沒有考慮像MPI(altough的Java不能很好地支持...),或儲蓄? (http://thrift.apache.org/

+0

命名管道將無法使用java – madhu 2011-01-28 12:26:41

+1

+1節儉鏈接 – vz0 2011-01-28 13:26:12

1

本地UDP仍然是聯合國可靠,但主要優點是UDP多播。你可以有一個數據發佈者和許多數據訂閱者。內核負責爲你的每個用戶提供一份數據報的副本。

另一方面,Unix本地數據報套接字需要可靠,但它們不支持多播。

+0

對不起,我不明白這一點。你是說UDP組播比普通的UDP更可靠嗎?在回送接口上使用UDP多播也是一個好主意,以實現跨進程pub/sub帶機內邊界。 – madhu 2011-01-31 06:57:59

0

本地UDP仍然不可靠,有時被防火牆阻止。我們在使用本地UDP進行線程間通信的MsgConnect產品中遇到了這個問題。順便說一句MsgConnect可以是你的任務的一個選項,所以你不需要處理套接字。不幸的是,沒有Python綁定,但存在「本地」C++和Java實現。

1

本地UDP比網絡更不可靠,比如50%+丟包不可靠。這是一個糟糕的選擇,內核開發人員將質量歸因於缺乏需求。

我會推薦調查基於消息的中間件,最好使用BSD套接字兼容接口,以便於學習曲線。一個建議是ZeroMQ其中包括C++,Java和Python綁定。