我想了解一些关于HttpAsyncClient的基本概念。
我这里没有使用连接池,在这里(1)或(2)关闭失败的http请求的正确方法是什么。
如果我使用每个新请求初始化httpclient,这里有什么性能影响?
我是否需要在finally块中关闭所有失败请求的连接,不这样做会有什么缺点?
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)
}
}
答案 0 :(得分:1)
乍一看,一切看起来都不错。我会摆脱httpget.releaseConnection(),没有必要。运行close语句将处理您需要的所有内容,并释放运行连接的线程。那种回答你的第三个问题;关闭连接将释放附加到它的资源。
至于每个请求初始化一个新连接;我不会那么关心资源,就像你要连接的服务器/网站的响应一样。打开任何Web请求都需要时间,而不是代表您,而是服务器并等待响应和事情发生。我会编写一个优化的函数来处理Web请求并为每个请求调用,因为它会打开一扇门,使其成为一个多线程应用程序,可以在其他人繁忙的情况下建立多个连接。