2014-01-30 107 views
1

我的機器中有10個進程,每個進程都應該有相互通信的能力。 現在情景是所有10個進程都應該處於監聽狀態,以便任何進程都可以隨時與之通信。當需要時,它應該能夠將消息傳遞給任何進程。 我想用C++和unix tcp/udp套接字進行編碼。但我不明白如何構造它。我應該使用UDP還是TCP,哪個更好?一個進程如何能夠同時監聽和發送數據。多路進程間通信

我需要幫助。

+0

異步讀寫功能來列出並同時寫入 –

+0

哪種環境? * NIX?視窗? –

+0

通常,會創建一個新的線程從套接字讀取。 –

回答

0

您可以運行的每個過程,嚴苛&跨度9點多線程其他進程連接爲客戶端。

+0

可以請您詳細說明。我不明白 – user3253591

+0

每個進程將偵聽1個端口(將在此端口接收數據)。如果進程想將消息發送到任何其他進程可以作爲客戶端發送給他們。 –

1

UDP的TCP VS的決定取決於你的消息,不管他們是否需要被可靠地傳遞等

對於純TCP,每個對等會對每個進程接受來自其他連接的TCP套接字同行(每個接受都會導致一個新的套接字)。這個新的套接字是雙向的,可以用來從一個對方發送/接收到另一個對方。有了這個解決方案,你需要某種發現機制。

對於UDP,除了不需要接受套接字以外,它大致相同。你仍然需要某種形式的發現機制。

發現機制既可以是具有公知的另一對等端(經由配置等)的地址,或者可能可以使用UDP廣播的發現機制。

zeroMQ,這是一個比原始套接字略高層面上來講,你將有一個單一的ROUTER插座上,您正在收聽和recieving數據,並在每個您要發送的數據對一個DEALER插座。

不管解決方案,你可能會需要使用處理輪詢()的網絡連接或類似的東西一個線程,並且收到消息,你需要處理郵件另一個線程(或線程池)。

0

這個問題適用於任何語言,所以答案不是C++相關的。

當給定一個選擇,尋找一個庫中的一個更簡單的通信(例如Apache的節儉)。

關於TCP/UDP:TCP通常比較慢但是更加可靠,所以默認情況下,選擇TCP,但是選擇UDP可能有其他原因,比如流,多播/廣播......可靠性可能不是問題當所有進程都在同一塊板上時,但您可能希望稍後與外部進程進行通信。

線程進程可以使用相同的套接字進行發送和接收而無需鎖定。

另外,你需要某種形式的計劃,以找出哪些端口發送到達的過程,並與TCP,你需要決定是否使用靜態連接或連接要發送的每一次。

0

你想做的事似乎是消息傳遞。

試圖建立它自己之前,先來看看提升MPI