2011-10-14 126 views
2

我正在使用Java-RMI編程一個簡單的客戶端/服務器應用程序。我想知道所有客戶何時死亡,以關閉服務器。在網絡上做了一些研究之後,我發現我可以讓我的服務器實現Unreferenced接口並定義unreferenced()方法。但是,這似乎不起作用,我認爲這是因爲服務器綁定到RMI註冊表,它可能有一個參考。RMI:檢查客戶端崩潰

有沒有人有一個想法,當我的情況下,所有的客戶端崩潰,我怎麼能得到通知?

感謝

回答

3

我認爲這是因爲服務器被綁定到RMI-註冊,這可能 持有對它的引用。

你是對的,RMIRegistry也算作DGC/Unreferenced用途的客戶端。

+0

那你如何檢查客戶是否在我的情況下墜毀?我正在使用一種解決方法,按定義的時間間隔對它們進行排序,但在我看來,這不太可靠,因爲客戶端應用程序可能已經崩潰,但客戶端主機仍可能正在運行... –

+0

這是唯一的方法。除非您在註冊表中綁定的對象只是一種Login對象,它返回未在註冊表中綁定的每客戶端Session實例。當Session.unreferenced()被調用時,它的(唯一的)客戶端已經消失了,所以它可以做任何想做的事情,比如導出它自己。你並不在意Login對象是否沒有客戶端。客戶端之間的區別崩潰,客戶端主機崩潰似乎與我無關。您感興趣的是包括客戶在內的整個系統的健康狀況。 – EJP

+0

有趣。你的方法真的是一個聰明的方法來做到這一點。但我認爲這個項目會堅持我的基於ping的方法。感謝您的澄清。 –