Java RMI - 客户端超时
问题描述:
我使用Java RMI构建分布式系统,它必须支持服务器丢失。Java RMI - 客户端超时
如果,如果这台服务器出现故障(如电缆问题),我的客户端连接到使用RMI,一台服务器,我的客户应该得到一个例外,因此它可以连接到其他服务器。
但是当服务器发生故障时,我的客户端没有任何反应,他一直在等待回复。我如何设置超时时间?
答
有一个系统属性,您可以设置。
喜欢的东西sun.rmi.transport.connectionTimeout
他们在这里详细介绍:
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/sunrmiproperties.html
答
套接字读取超时,你可以设置你自己的工厂这个样子,
RMISocketFactory.setSocketFactory(new RMISocketFactory()
{
public Socket createSocket(String host, int port)
throws IOException
{
Socket socket = new Socket();
socket.setSoTimeout(timeoutMillis);
socket.setSoLinger(false, 0);
socket.connect(new InetSocketAddress(host, port), timeoutMillis);
return socket;
}
public ServerSocket createServerSocket(int port)
throws IOException
{
return new ServerSocket(port);
}
});
答
最近我遇到了这个问题,以及和发现我需要设置以下Java属性才能使客户端的RMI呼叫超时:
sun.rmi.transport.tcp.responseTimeout
下面是这些PARAMS满瓢在Java中的较新版本:
+1
这对我不起作用。 – ZhekaKozlov 2015-06-29 07:30:43
THX,它会helpa很多! – 2009-11-30 22:06:25
Apols为了简洁和不准确;没有互联网和iPhone正在慢... – 2009-11-30 22:08:05
我在想,它可能是sun.rmi.transport.connectionTimeout。 但defaulf值是15秒。我的客户一直在等待答复的分钟.. =/ – 2009-11-30 22:19:19