2009-11-30 171 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