2012-01-21 50 views
1

我正在使用套接字進行各種進程之間的通信。一切都在同一臺機器上運行,所以沒有數據包丟失,而且我還沒有得到讀取超時等消息數據的通常是小斑點(JSON,有時二進制)。現在我想要做跨計算機通信。客戶端/服務器連接通常如下所示:客戶端通知服務器啓動一些處理(傳遞任務描述),服務器完成工作並返回進度,客戶端可以選擇發送終止消息。一旦完成,服務器仍然在監聽,而客戶端完全斷開連接(即會話結束,開始新任務開始新會話。)如何做簡單,可靠的網絡信息?

應該如何實現通信?我可以輕鬆地繼續在網絡上使用套接字,但我的理解是,現在我需要添加大量的錯誤處理來確定消息何時未通過並以某種方式與服務器通信。我想要的只是send(message, target),並確信完整的消息得到傳輸;當另一方死亡時加上一些通知。我已經看到有幾個庫像zero-mq這樣的庫,它聲稱要做到這一點,但也有更多,我不確定這樣的消息庫是否真的有必要。有沒有一些易於使用的庫來做一些基本的溝通?

我正在使用C++ & Python和BSD樣式許可證對於庫來說絕對是首選。圖書館也應該相當穩定,因爲溝通部分並不重要,我希望能夠堅持一個解決方案。

回答

2

TCP保證所有pagackes被傳遞到目的地[如果它沒有重新發送]。所以,如果你使用它 - 它可能需要更多時間[與單機相比],但msg傳輸的正確性仍然存在。

+0

所以只要我堅持使用TCP,我設置? – Anteru

+0

還有就是網絡太卡住bizare邊緣的情況下,味精會不會到達不管是什麼 - 但是,如果是這樣的話 - 沒有什麼可以做的就是它通過。除此之外 - 是的,你幾乎用TCP來設置。 – amit

+0

非常好,非常感謝! – Anteru

0

這聽起來像你需要一個消息隊列。

有很多很多的解決方案,其中只有一個是Redis的:http://redis.io

2

你應該看看ZeroMQ。它具有比純BSD套接字簡單的界面,更加便於攜帶,並具有出色的文檔