2014-07-14 41 views
0

是使用套接字檢查服務器的好方法嗎? 這樣使用套接字檢查服務器的好方法是?

public boolean hostAvailabilityCheck(String serverAddress, Integer serverPort) { 
    try { 
     Socket s= new Socket(serverAddress, serverPort); 
     s.close(); 
    } catch (IOException exception) { 
     return false; 
    } 
    return true; 
} 

,或者這是更好

public boolean isServerAvailable(String serverAddress, Integer serverPort) { 
    boolean isAlive = true; 
    try { 
     URL url = new URL("http:/" + serverAddress + serverPort); 
     HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
     httpURLConnection.connect(); 
     httpURLConnection.disconnect(); 
    } catch (Exception e) { 
     isAlive = false; 
    } 

    return isAlive; 
} 

我試着去查看是否有Solr的服務器已啓動將數據推林不知道這是很好的!我希望 org.apache.solr.client.solrj.response 類SolrPingResponse做同樣的事情。謝謝

+1

那麼,如果你可以連接到服務器,它最有可能啓動並運行。 –

回答

0

打開套接字只有在知道端口正在目標主機上運行的特定服務時纔有用。

您也可以使用InetAddress.isReachable(),它會嘗試使用多種方法來測試InetAddress指定的主機是否可訪問。當然這種方法也不是100%的保證,因爲它不具備自定義配置服務的知識,但這是一個很好的起點。

0

接受套接字連接並不一定表示服務器可以在那個時間處理請求。發送http請求是檢查服務器可用性的更好方法。這是負載平衡器用來檢查服務器可用性以處理請求的最廣泛應用。除了建立http連接之外,您還需要發送一個虛擬請求&,確認HTTP爲其發送成功狀態代碼。

0

考慮到new Socket(String, int)的定義,這可以在任意端口上建立服務器存在(例如,您可以允許來自端口22的sockets,ssh)。這只是您嘗試所有端口的問題。

第二個代碼做點什麼很有不同!而不是僅僅測試給定的URL是否連接到服務器,它會詢問給定的URL是否連接到HTTP服務器!如果URL沒有被HTTP服務器支持,那麼連接失敗...

...它無法獲得HttpURLConnection,因爲沒有HTTP服務器來創建HTTP連接 - 不是因爲服務器(在此地址)無法接受來自其他端口的信息。

0

ping()方法SolrJ做的不僅僅是連接到套接字,它還發出一個HTTP GET請求到/admin/ping以查看容器和Solr應用程序是否響應。這允許SolrJ測試Solr實例是否實際上正在回答查詢,而不僅僅是容器仍然接受套接字連接。

這個區別對你是否重要是你必須自己決定的,儘管我會建議在你的測試中包含SolrJ並使用ping方法來檢查你自己的連通性。

在第三方應用程序監視解決方案中,您將使監視應用程序對/admin/ping發出HTTP GET請求,以獲得最佳結果。

相關問題