如何解决Java-使用RMI检测客户端崩溃
| 我已经创建了RMI连接,但是当客户端结束或崩溃时,我不知道如何通知服务器。我发现了unreferenced()方法,但是它不起作用。任何想法? (服务器是多客户端,只有一种对象传递给客户端,但是任何客户端都有不同的实例)。 谢谢。解决方法
这样做的问题在于,如果客户端崩溃,则很难执行任何操作,最终您将等待超时。
通常的解决方案是设置“心跳”,即定期调用。如果客户的心跳在2个周期后仍未收到,则说明它已经死了。
, unreferenced()方法确实可以工作,但是要花DGC时间间隔才可以。这随JDK版本而异。我上次看那是十分钟。有系统属性可以控制此操作,请参见Java RMI主页。此功能将通过特定于客户端的RemoteSession对象来使用,该对象实现客户端所需的API,跟踪客户端状态,并将Unreferenced作为故障保护实现,以防止客户端无法通过其API保持活动或退出。
除了跟踪客户端上次呼叫您的时间之外,没有其他可靠的方法来检测客户端崩溃,除非您有客户端回调,在这种情况下服务器可以尝试调用客户端。但是,这些通常被视为安全隐患,未经特殊处理,通常无法通过防火墙。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。