4

我使用 commons-httpclient 向 Web 服务器发送查询。Web 服务器从不关闭连接,但与连接上下文相关联的内存泄漏很小。

因此,我想不时关闭持久连接(例如每个 X 查询),但我没有找到任何方法来做到这一点。我使用 MultiThreadedHTTPConnectionManager

我可以使用 MultiThreadedHTTPConnectionManager.closeIdleConnections(very_small_delay),但这不是很可靠:如果我的 Java 代码有很多工作要做,那么可能没有连接是空闲的,因为总是有其他线程在等待空闲连接。

谢谢,

4

4 回答 4

2

在执行一个方法后,比如说 GET,您可以读取响应的 HttpStatus 编号,以决定是否需要调用 method.releaseConnection()。

或者,如果您知道要关闭哪个连接,您可以尝试

MultiThreadedHTTPConnectionManager
void    releaseConnection(HttpConnection conn) 

好吧,我认为你有一些理由想要“杀死”一个连接。假设您有连接,即您想要关闭的 HttpConnection 对象。这种方法有帮助吗?

HttpConnection
public void close()

    Closes the socket and streams. 
于 2010-02-04T13:04:55.983 回答
1

你在打电话method.releaseConnection()吗?

http://hc.apache.org/httpclient-3.x/threading.html#Connection_Release

于 2010-02-04T12:55:18.517 回答
0

当我使用releaseConnections()仍然有连接CLOSE_WAIT状态。如果我在closeIdleConnections(0)之后添加可以releaseConnections吗?

这是否意味着即使连接被发送回池以供其他客户端使用但未关闭/释放然后closeIdleConnections将关闭它?

于 2015-02-16T06:57:11.987 回答
0

你能用得起SimpleHttpConnectionManager(boolean alwaysClose)吗?

httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))
于 2012-11-28T15:07:46.730 回答