2009-11-30 3 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, было бы Heľpa много! –

+0

Аполлы для краткости и неточности; нет Интернета и iPhone медленно ... –

+0

Я думал, что это может быть sun.rmi.transport.connectionTimeout. Но значение defaulf составляет 15 секунд. Мой клиент ожидает ответа в течение минут .. =/ –

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

+0

Работает отлично. И не нужно использовать эти уродливые -D * трюки – Panayotis

+0

какой уродливый взлом! См. Ниже ответ @ Noky с подходом, основанным на свойствах. – fommil

12

Я недавно столкнулся с этой проблемой, а также и что мне нужно установить следующее свойство Java для вызова RMI для тайм-аута на стороне клиента:

sun.rmi.transport.tcp.responseTimeout 

Вот полный совок на этих Params в новых версиях Java:

+1

Это не работает для меня. – ZhekaKozlov

Смежные вопросы