2009-11-30 153 views
10

我使用Java RMI構建分佈式系統,它必須支持服務器丟失。Java RMI - 客戶端超時

如果,如果這臺服務器出現故障(如電纜問題),我的客戶端連接到使用RMI,一臺服務器,我的客戶應該得到一個例外,因此它可以連接到其他服務器。

但是當服務器發生故障時,我的客戶端沒有任何反應,他一直在等待回覆。我如何設置超時時間?

回答

7

有一個系統屬性,您可以設置。
喜歡的東西sun.rmi.transport.connectionTimeout

他們在這裏詳細介紹:
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/sunrmiproperties.html

+0

THX,它會helpa很多! – 2009-11-30 22:06:25

+0

Apols爲了簡潔和不準確;沒有互聯網和iPhone正在慢... – 2009-11-30 22:08:05

+0

我在想,它可能是sun.rmi.transport.connectionTimeout。 但defaulf值是15秒。我的客戶一直在等待答覆的分鐘.. =/ – 2009-11-30 22:19:19

14

套接字讀取超時,你可以設置你自己的工廠這個樣子,

  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); 
       } 
      }); 
+0

謝謝爲了這!到底我在找什麼...... – Fortega 2010-04-06 07:57:50

+0

完美地工作。沒有必要使用這些醜陋的D技巧 – Panayotis 2013-10-15 01:24:16

+0

什麼醜陋的黑客!請參閱下面的@ Noky的答案,以財產爲基礎的方法。 – fommil 2013-12-12 09:08:28