我有Chat Client Server應用程序,我們正在擴展。所以我需要在兩臺聊天服務器之間進行服務器間通信。通過Java套接字的InterServer通信
問題是:假設有兩個服務器A和B現在假設客戶 C1被TCP連接與服務器A和與 服務器B. 客戶端C2被連接TCP然後問題是:作爲同一器件的應用客戶端C1和C2應該能夠相互識別爲已登錄並可在線使用,但由於沒有內部服務器 通信,因此不會發生這種情況。
可能的解決方案否1是:使用TCP連接將服務器A和服務器B登錄到每個其他 。在這裏,我可以通過 TCP連接將登錄XML 消息(字符串)和DataInputStream轉發到其他服務器。所以每個登錄都被轉移到另一臺服務器上,以便每臺服務器都可以訪問每個客戶端,客戶端C1可以看到 客戶端C2已登錄(在線),反之亦然。
解決方案1的問題是:假設客戶端C1現在可以看到Client C2爲 ,並且客戶端C1向客戶端C2發送消息。 會發生什麼是服務器A將嘗試寫入DatainputStream爲客戶端 C2它建立在服務器B上,而不是在服務器A上。這裏是 問題的代碼將在這裏打破,服務器A將無法發送 消息給客戶端C2。
任何輸入將不勝感激。
謝謝
爲什麼您需要擴展到多臺機器?我們在談論多少用戶?您是否已經使用了非阻塞IO或者仍然使用每個連接的一個線程?如果可能的話,避免在多臺機器上擴展 - 這是一個(有狀態)的痛苦世界。 – 2012-04-17 07:39:21
謝謝reply.Well我的客戶希望確保如果他會得到更多的打擊他的產品,他應該能夠擴大規模。我們討論了基準測試和除了新產品以外的所有產品,他無法計算可能的命中數。所以我必須實施服務器間通信,無論如何,正如我上面所解釋的。該產品已經在使用每個連接使用Thread.am思考非阻塞套接字,它的即將到來。所以在你的想法中的任何可能的解決方案呢? – Java 2012-04-17 08:08:28