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

时间:2017-05-24 14:51:13

标签: java rmi

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

我一直在搜索,已将客户端和服务器上的属性设置为connectionTimeout, responseTimeout, disableHttp,但没有成功。希望有人可以帮助我指明我的网络。

1 个答案:

答案 0 :(得分:0)

与此相关的唯一Sun RMI system propertiessun.rmi.transport.tcp.responseTimeoutsun.rmi.transport.tcp.readTimeout,您需要在导出任何远程对象之前设置它们。

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

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

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

如果您正在寻找能够检测消失的客户的解决方案,那么有更好的解决方案:请参阅this answerthis one