2014-11-08 111 views
0

我已經在python中創建了一個簡單的聊天程序,它允許許多客戶端連接到一臺服務器。我現在想創建一個雙服務器模型,仍然有很多客戶端,以便客戶端能夠連接到任一服務器。然後,當客戶端向server1發送消息時,它將向所有連接的客戶端廣播,併發送給server2,然後server2將廣播給所有(server2的)連接的客戶端。我堅持的部分是服務器到服務器的通信。我想在同一子網的本地局域網上執行此操作;我不想通過互聯網來做到這一點,所以不需要擔心DNS或其他協議。分佈式本地聊天服務器

不確定是否需要在此處執行多線程,或者只是添加到維護連接併發送/接收數據的while循環。

任何幫助在這裏將不勝感激。

+0

您看過XMPP,這是GTalk/Google環聊使用的技術嗎?你在找什麼? – 2014-11-08 04:37:29

回答

0

我不認爲線程是一個問題在這裏。您可以使用或不使用它來設計解決方案。

總之,您的服務器與您的客戶並沒有太大的不同。他們連接到其他服務器並向他們發送文本/數據。你唯一需要特別處理的是重播客戶聊天。

這特別棘手,並且會遇到很多問題。你可以看看IRC如何處理它。如果您留在局域網內,您將面臨多個可能會緩解的問題。在IRC中,所有的服務器都是相當平等的,所以把它們放在一起不應該影響整個網絡(實際上這是不同的:p)。

如果server1廣播了帶時間戳[5秒]的message1,然後從時間戳[2秒]的server2接收message2,該怎麼辦?對於客戶端消息將出現亂序。

你可以做的一件事是爲所有其他服務器選擇一個主服務器。這將包含主列表,並將管理時間戳。所有其他服務器都會向客戶端發送消息,並等待「主聊天日誌」的同步,然後將新數據廣播到所有連接的客戶端。如果客戶端有很多滯後時間,某些消息可能會出現亂序,但至少時間戳會匹配並且將是增量式的