我想了解有关 HttpAsyncClient 的一些基本概念。
我这里没有使用连接池,这里关闭失败的http请求的正确方法是什么(1)或(2)。
如果我用每个新请求初始化 httpclient,会对性能产生什么影响?
我是否需要在finally block 中关闭所有失败请求的连接,不这样做有什么缺点?
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(3 * 1000)
.setConnectionRequestTimeout(3 * 1000)
.setSocketTimeout(30 * 1000)
.build();
CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
.setDefaultRequestConfig(config)
.build();
httpclient.start();
try {
if (targetHost != null && httpget != null)
response = httpclient.execute(HttpHost, HttpGet);
catch (Exception e) {
throw new CustomException("service.unavailable");
} finally {
if (httpget != null){
httpget.releaseConnection(); (1)
httpclient.close();(2)
}
}
最佳答案
乍一看一切正常。我会摆脱 httpget.releaseConnection(),这是没有必要的。运行 close 语句将处理您需要的一切,并释放运行连接的线程。这回答了你的第三个问题;关闭连接将释放附加到它的资源。
至于每次请求初始化一个新的连接;我不会像您所连接的服务器/网站的响应那样关心资源。打开任何网络请求都需要时间,这并不是真正代表您,而是服务器并等待响应和事情发生。我会编写一个包含所有 Web 请求处理的优化函数,并为每个请求调用该函数,因为它将打开一扇门,使其成为一个多线程应用程序,在其中可以在其他连接忙时建立多个连接。
关于java - 如何处理 HttpAsyncClient 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43487053/