我使用Java RMI構建分佈式系統,它必須支持服務器丟失。Java RMI - 客戶端超時
如果,如果這臺服務器出現故障(如電纜問題),我的客戶端連接到使用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中的較新版本:
這對我不起作用。 – 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