2011-03-19 153 views
0

我正在構建一個具有一些非常特定需求的客戶端/服務器應用程序。有兩種服務器:第一種提供大多數遠程過程,客戶端直接連接到這些服務器,而第二種服務器是單個服務器,它應該跟蹤哪些用戶處於活動狀態(客戶端)以及第一臺服務器當一個方法被調用時,kind是活動的。RMI客戶端跟蹤

最主要的是監視器只應該連接到服務器而不是直接連接到客戶端。我的第一個想法是實現一個簡單的登錄/註銷rmi方法,當客戶端連接/斷開連接並跟蹤列表中的人員時,主要問題是客戶端或服務器異常終止。

例如,如果客戶端突然脫機,應該以某種方式通知服務器並相應地更新列表,而如果服務器熄滅,則連接到它的所有客戶端應在控制服務器中標記爲不活動。

有關如何實現此功能的任何想法,將不勝感激。

回答

0

我建議對問題實施一個「會話」方法,其中服務器和客戶端每隔幾分鐘(根據您的需要可能需要幾秒或幾小時)向監控服務器發送「心跳」方法調用。如果監控服務器在一段時間內沒有收到來自服務器或客戶端的「心跳」,則認爲它們已經消失(異常終止)並相應通知。

+0

嗯是的,這應該很好地工作。我猜測的心跳方法只是一個不時被調用的方法,因此在單獨的線程中運行它應該讓用戶隱藏東西。 – 0000 2011-03-19 17:11:35

0

Zookeeper可能是要看的東西。讓每個客戶端服務器爲自己註冊一個臨時節點,併爲每個連接到它的客戶端註冊一個臨時節點。當客戶端服務器關閉時,臨時節點將會死亡。監視器服務器只需要觀看zookeeper來查看誰啓動並連接。

爲了檢測客戶端正在關閉,您需要某種聽覺,以便客戶端服務器可以檢測客戶端何時死亡。如果客戶端可以直接與zookeeper交談,那麼只需讓客戶端在zookeeper中註冊一個臨時節點,客戶端服務器就可以監視客戶端的臨時節點,並知道客戶端何時關閉。