2013-12-14 40 views
1

我正在寫一個需要在多臺機器上運行(每次3-4個)的軟件,並顯示相同的數據。可以從每臺機器修改數據,並且更改將立即發送到其他機器。用於多路通信的網絡協議

沒有中央服務器,但所有機器都很友善,並且位於同一個本地網絡上。

最重要的事情在這裏是(1)低延遲和(2)消息(總是能夠知道哪一個先)的串行化 - 基本上就是我在尋找我的一個聊天室,但程序的消息。什麼是最好的網絡協議來使用它?

回答

1

在第四層中,您將使用TCP來可靠地傳遞消息。如果你在談論3-4臺機器應該是好的。在TCP上面,你可以使用你自己的應用程序特定的協議。我不知道XMPP是否會讓你在分散的環境中工作。

您需要解決的一個問題是,所有人都以相同的順序看到消息。爲此,您可以使用矢量時鐘算法或某種方式解決衝突,以防兩個消息同時發送。

在局域網中,任何協議都應該適用於低延遲。

關於您需要的連接數量,這取決於您的設計。始終考慮少數幾個同伴:

  1. 對於網狀連接,您需要每兩個對等點在兩個方向上的TCP連接。
  2. 您可以採用另一種設計:圓形連接,每個節點連接到一個鄰居。這將減少不同挑戰的現有連接的數量(如果一個鄰居崩潰或關閉,會發生什麼情況)。
  3. 我在幾年前實現的另一個有趣的替代方法是:使用UDP多播將消息發送到多播組的所有成員,然後所有接收方與發送方打開一個TCP連接以發回ACK(確認)。然後,發送方檢查收到的所有ACK,如果有人丟失,它將與該連接打開一個TCP連接並可靠地發送消息。

你必須考慮的其他事情:團隊管理。你怎麼知道一個同伴離開了這個小組,或者一個新的同伴加入了這個小組?這是另一個考慮因素。

+0

所以我會創建一個TCP連接從每臺機器到每臺機器?對於4臺機器,我必須同步12個連接,以確保它們都以相同的順序顯示相同的數據。 – configurator

+1

我編輯了我的回覆來回答你的問題 – rodolk