我使用带有PoolingHttpClientConnectionManager的HttpClient 4.3和两个连接到REST API的线程。两者都是永久发送请求。它运行良好几分钟,但随后,请求开始超时。浏览时,即使Chrome无法与网站建立连接。这是我发送请求的代码:
String sendGETApache(HttpGet httpGet) {
try {
CloseableHttpResponse response = httpClient.execute(httpGet); //, httpContext);
HttpEntity entity = null;
try {
entity = response.getEntity();
if(entity != null) {
String s = EntityUtils.toString(entity);
return s;
}
} catch (Exception e) {
e.printStackTrace();
httpGet.abort();
} finally {
EntityUtils.consume(entity);
response.close();
}
} catch (Exception e) {
httpGet.abort();
e.printStackTrace();
} finally {
httpGet.releaseConnection();
}
return "";
}
HttpClient是一个唯一的对象,在两个线程之间共享。 我已经尝试将DefaultMaxPerRoute和MaxTotal限制为1和2,我甚至使用了非常大的值,没有结果。 我甚至实现了一个额外的线程,它反复调用closeExpiredConnections()和closeIdleConnections(),也没有改进。 你知道我能做什么吗?我觉得某处资源漏水了,但我不知道...... 谢谢