2

这个问题与 PoolingClientConnectionManager (HttpClient 4.2.5 API)有关

我在池中最多有 5 个远程连接和一个包含 20 多个 url 的列表来下载文件。下载文件后我释放连接。但我没有给出任何超时值。从 5 个不同的 URL 下载文件后会发生什么。我认为我从文档中收集到的是第 6 个文件直到客户端检测到连接已从其结束关闭时才开始下载。是这样吗?从 URL 下载文件后,我能做些什么来关闭套接字。请注意,我从中下载文件的所有 URL 都位于不同的服务器上。

4

2 回答 2

3

将连接释放回管理器并不能保证立即处理它。经理很可能会尝试保持连接处于活动状态。您在此处有两个选项(1)正如user2310289正确指出的那样,您可能希望实现自定义连接,在连接释放时不加选择地关闭连接,或者(2(推荐))实施自定义驱逐策略以在一段时间后驱逐持久连接HttpClient教程中描述的不活动状态

于 2013-08-27T13:11:11.923 回答
3

根据HTTPClient 网页

正确的方法是

} finally {
  // Release the connection.
  method.releaseConnection();
}  

文档还提到,为了强制关闭连接,最简单的方法是覆盖 connectionManager,在您的情况下是 PoolingClientConnectionManager。

如果您查看此处的代码,您可以看到您可以更改 releaseConnection 方法。具体更改第 255 行,以便如果连接打开,则将其关闭。

于 2013-08-26T06:04:17.710 回答