如何在commons-httpclient中强行断开连接?

时间:2010-02-04 12:34:05

标签: java apache-commons-httpclient

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

因此,我希望不时关闭持久连接(例如,每个X查询),但我没有找到任何方法来执行此操作。我使用MultiThreadedHTTPConnectionManager

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

谢谢,

4 个答案:

答案 0 :(得分:2)

执行一个方法之后,让我们说GET,你可以读取响应的HttpStatus数,来决定是否需要调用method.releaseConnection()。

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

MultiThreadedHTTPConnectionManager
void    releaseConnection(HttpConnection conn) 
好吧,我认为你有理由想要“杀死”一个连接。假设您有想要关闭的连接HttpConnection对象。愿这个方法有帮助吗?

HttpConnection
public void close()

    Closes the socket and streams. 

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你能负担得起SimpleHttpConnectionManager(boolean alwaysClose)吗?

httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))

答案 3 :(得分:0)

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

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