2011-10-14 127 views
2

我正在使用Java-RMI编程一个简单的客户端/服务器应用程序。我想知道所有客户何时死亡,以关闭服务器。在网络上做了一些研究之后,我发现我可以让我的服务器实现Unreferenced接口并定义unreferenced()方法。但是,这似乎不起作用,我认为这是因为服务器绑定到RMI注册表,它可能有一个参考。RMI:检查客户端崩溃

有没有人有一个想法,当我的情况下,所有的客户端崩溃,我怎么能得到通知?

感谢

回答

3

我认为这是因为服务器被绑定到RMI-注册,这可能 持有对它的引用。

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

+0

那你如何检查客户是否在我的情况下坠毁?我正在使用一种解决方法,按定义的时间间隔对它们进行排序,但在我看来,这不太可靠,因为客户端应用程序可能已经崩溃,但客户端主机仍可能正在运行... –

+0

这是唯一的方法。除非您在注册表中绑定的对象只是一种Login对象,它返回未在注册表中绑定的每客户端Session实例。当Session.unreferenced()被调用时,它的(唯一的)客户端已经消失了,所以它可以做任何想做的事情,比如导出它自己。你并不在意Login对象是否没有客户端。客户端之间的区别崩溃,客户端主机崩溃似乎与我无关。您感兴趣的是包括客户在内的整个系统的健康状况。 – EJP

+0

有趣。你的方法真的是一个聪明的方法来做到这一点。但我认为这个项目会坚持我的基于ping的方法。感谢您的澄清。 –