2011-03-22 19 views
1

我有一個程序將在網絡上的多個設備上運行。這些程序需要在彼此之間發送數據 - 指定設備(不是所有設備)。我正在尋找一種網絡服務,它可以讓我發送消息給選定的客戶端

server = server.Server('192.168.1.10') 

server.identify('device1') 
server.send('device2', 'this will be pickled and sent to device2') 

這是我需要做的一些基本的示例代碼。當然,它也需要接收。

我正在看着使用Twisted構建我自己的簡單消息傳遞服務器時,有人指着我的方向MPI。我從來沒有研究過MPI協議,並且網站給出了相當模糊的例子。

MPI是一種很好的方法嗎?有更好的選擇嗎?

+0

爲什麼不能像XMLRPC那樣使用簡單的東西? – 2011-03-22 08:16:09

+0

我從來沒有使用過XMLRPC。我會看看它。乾杯。 – dave 2011-03-22 08:25:52

回答

2

有幾個開源消息代理已經爲您處理了這種東西,並且提供了一個完整的API以供使用。

你應該看看:

你可以建立它自己,但是這將是像重新發明輪子(和上一個側面說明:其實我才意識到我是中途建設消息代理之前,我開始尋找現有的解決方案 - 建設一個需要很多工作)。

+0

我聽說過很多關於RabbitMQ的內容。稍後我會玩一玩。乾杯 – dave 2011-03-22 08:26:44

1

考慮使用諸如ZeroMQ之類的東西。它支持最有用的消息方式 - 推/拉,發佈/訂閱等,雖然它不是100%從您的問題清楚你需要哪一個,我敢肯定,你會在那裏找到答案。

他們有一個很好的user guide here,和Python bindings是很好的開發和支持。一些代碼示例are here

+0

這是一個非常廣泛的指南。稍後我會閱讀它。歡呼聲 – dave 2011-03-22 08:28:06

+0

@phil:通過它瀏覽 - 有很棒的圖表可以吸引你的注意力,以便實現你想實現的確切方案 – 2011-03-22 08:28:42

+2

如果你不完全控制整個網絡,你可能不想使用ZeroMQ作爲不可信任的一方可以很容易地崩潰它。 – 2011-03-22 12:26:38

2

MPI非常擅長在集羣中的多臺或多臺機器上運行緊密耦合的程序。如果您運行的是非常鬆散耦合的程序 - 只是偶爾進行交互 - 或者機器比集羣內的分佈更分散,就像散佈在局域網中一樣 - 那麼MPI可能不是您想要的。

0

您可以實現MPI函數以創建不同代碼之間的通信。在這種情況下,服務器程序應公開帶有不同ID的「MPI端口」。客戶應該查找這個端口並嘗試連接它們。只有服務器可以接受每個通信。一旦通信建立,代碼就可以在它們之間交換數據。

另一個可能性是在多指令MPI選項中運行不同的程序。在這種情況下,所有程序都是同時執行的,並且沒有必要創建端口通信器。執行完後,您可以在您選擇的程序組之間創建特定的通信器。

請告訴我你需要什麼樣的方法,我可以提供c代碼來實現這些功能。

相關問題