RMI 服务器 25 秒超时,当远程客户端连接被切断



我有一个RMI服务器,远程客户端以无线方式连接。在无线连接断开之前,一切都很好。我的 RMI 服务器检测到它没有收到来自客户端的 ping,并向客户端执行 ping 操作,该 ping 会抛出异常,然后我处理该异常。问题是抛出此异常大约需要 25 秒,因此在抛出异常之前,RMI 服务器不会响应来自其他连接客户端的任何请求。

我已经搜索了几天,将客户端和服务器上的属性都设置为connectionTimeout, responseTimeout, disableHttp,但没有成功。希望有人可以帮助我指明方向,以确保我的网络。

与此相关的唯一 Sun RMI 系统属性是 sun.rmi.transport.tcp.responseTimeout ,也许是 sun.rmi.transport.tcp.readTimeout ,您需要在导出任何远程对象之前设置这些属性。

但是,我质疑您的诊断。RMI 运行时系统和 RMI 服务器都不是单线程的,因此 25 秒的延迟不会阻碍其他客户端。

因此,如果您遇到客户停滞,这不是RMI的错。可能是网络堆栈行为不端。

我进一步质疑你的整个战略。RMI 使用连接池,而不是永久连接:对服务器和客户端执行 ping 操作的想法完全违背了 RMI 的理念,并且浪费了连接。我会摆脱所有这些ping,并在它们出现时处理java.rmi.ConnectExceptions。您可以通过该页面上的其他系统属性稍微控制连接生存期。

如果您正在寻找一种检测消失客户端的解决方案,那么还有更好的解决方案:请参阅此答案和此答案。

最新更新