2012-04-13 3 views
3
.

ниже - статический метод проверки того, находится ли на другом сервере RMI в сети, я в основном вызываю метод, который, если он отвечает true, означает, что соединение включено, если оно не отвечает и вместо этого дает исключение, это означает, что что-то не так. Есть ли лучший способ сделать это? И есть ли лучший способ ускорить процесс? Если есть связь, он возвращается со значением быстро, но если это не так, то требуется.. Лучший способ проверить подключение RMI.

public static boolean checkIfOnline(String ip,int port) 
{ 
    boolean online = false; 
    try { 

    InetAddress ipToConnect; 
    ipToConnect = InetAddress.getByName(ip); 

    Registry registry = LocateRegistry.getRegistry(ipToConnect.getHostAddress(),port); 
    ServerInterface rmiServer = (ServerInterface)registry.lookup("ServerImpl"); 

    online = rmiServer.checkStudentServerOnline(); 

    if(online) 
    { 
     System.out.println("Connected to "+ipToConnect); 
    } 

    } catch (RemoteException e) { 

     System.out.println(e.getMessage()); 
     //e.printStackTrace(); 
     return false; 
    } catch (NotBoundException e) { 
     System.out.println(e.getMessage()); 
     //e.printStackTrace(); 
     return false; 
    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return online; 

} 
+2

Ваш подход, похожий на ping, кажется мне разумным. – Anonymous

ответ

3

Лучший способ проверить, является ли доступен любой ресурс просто попытаться его использовать. Это будет либо успешным, либо неудачным, и ошибка говорит вам, что он недоступен (или что-то еще не так).

Любой подход, основанный на выполнении дополнительного кода заранее, - это просто попытка предсказать будущее. Это связано с несколькими проблемами, в том числе с проверкой неправильной вещи и изменением статуса между тестом и использованием.

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