是使用套接字检查服务器的好方法吗?

时间:2014-07-14 09:19:31

标签: java sockets solr

使用socket是检查服务器的好方法吗? 像这样

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类也做同样的事情。感谢

4 个答案:

答案 0 :(得分:0)

只有当您知道目标主机上正在运行的端口的特定服务时,才能打开套接字。

您还可以使用InetAddress.isReachable()尝试多种方法来测试InetAddress指定的主机是否可访问。当然这种方法也不是100%保证,因为它不了解自定义配置的服务,但它是一个很好的起点。

答案 1 :(得分:0)

接受套接字连接并不一定表示服务器可以在那时处理请求。发送http请求是检查服务器可用性的更好方法。这是负载平衡器最广泛使用的,用于检查处理请求的服务器可用性。除了建立http连接之外,您还需要发送虚拟请求&确认HTTP为其发送成功状态代码。

答案 2 :(得分:0)

考虑到new Socket(String, int)的定义,这可以在任意端口上建立服务器存在(例如,您可以允许来自端口22,ssh的套接字)。这只是你尝试的所有端口的问题。

第二个代码做的事情非常不同!它不是仅测试给定的URL是否连接到服务器,而是询问给定的URL是否连接到 HTTP服务器!如果URL没有HTTP服务器支持,则连接失败...

...它无法获得HttpURLConnection,因为没有HTTP服务器来创建HTTP连接 - 不是因为服务器(在此地址)无法接受来自其他端口的信息。

答案 3 :(得分:0)

ping()的{​​{1}}方法不只是连接到套接字,它还向SolrJ发出HTTP GET请求,以查看容器和Solr应用程序是否响应。这允许SolrJ测试Solr实例实际上是在回答查询,而不仅仅是容器仍在接受套接字连接。

这种区别对您来说是否重要是您必须自己决定的,尽管我建议在测试中包含SolrJ并使用/admin/ping方法自行检查连接性。

在第三方应用程序监控解决方案中,您将使监控应用程序向ping发出HTTP GET请求以获得最佳结果。