2011-05-30 44 views
2

我創建了一個RMI連接,但我不知道如何在客戶端或崩潰通知服務器。我找到未引用()方法,但它不起作用。任何想法?
(服務器是多客戶端,只有一種對象傳遞給客戶端,但任何客戶端都有不同的實例)。
謝謝。爪哇 - 檢測客戶端崩潰與RMI

回答

6

但問題是,如果客戶端崩潰,很難把它做任何事情,你最終等待超時。

通常的解決辦法是設置一個「心跳」,週期性呼叫;如果客戶端心跳在2個時期後沒有找到你,你會發現它已經死亡。

+0

感謝您的回覆。這是我最後的選擇,因爲我希望有更好的選擇。無論如何,服務器如何調用客戶端?服務器,現在,只使用:\t \t \t LocateRegistry.createRegistry(RMI_PORT); Naming.rebind(...); 有沒有一種方法來「ping」客戶端? 再次感謝:) – Simon 2011-05-30 05:18:43

2

未引用()方法確實工作,但它需要的DGC時間間隔在做之前。這隨JDK版本而變化。上次我看了十分鐘。有系統屬性可以控制這一點,請參閱Java RMI主頁。該設施將通過客戶端特定的RemoteSession對象使用,該對象實現客戶端需要的API,跟蹤客戶端狀態並實現Unreferenced作爲防止客戶端保持活動狀態或通過API註銷的失敗保護。

有沒有其他的檢測除了跟蹤,當他們最後一次叫你,除非你有客戶端回調,在這種情況下,服務器可以嘗試調用客戶端的其他客戶端崩潰可靠的方法。然而,這些被廣泛認爲是安全風險,並且通常在沒有特殊處理的情況下通過防火牆不起作用。