releaseConnection是close connection,基于连接池的认识,我们首先会想到是释放链接,至于是否close就不得而知了。近日发现线上系统出现了close wait的socket,close wait是由于被动关闭的一方没有执行socket.close()导致,由此可见我们code中存在没有正确关闭socket。
类似的code是这样的
HttpClient httpClient = newHttpClient();
GetMethod getMethod = new GetMethod();
httpclient.execute(getMethod);
>>>>省略
finally
getMethod.releaseConnection()
以上code存在一个方法体内,即每调用一次即创建一个httpclient,然后调用完毕销毁这个对象。
HttpClient默认使用SimpleHttpConnectionManager,这个connection manager维持一个connection,httpclient执行GetMethod的时候借用connection manager的connection,并标识in_use为true,而releaseConnection,只是归还并将in_use标记为false以供下次使用而不是真正的close。
结论:
1.releaseConnection不会close connection,适合的应用场景是构造一个httpclient,连续多个请求,而且并不是线程安全的。
2. 解决方案:
2.1 SimpleHttpConnectionManger的alwaysClose设置为true,这时候release就是真的close了
2.2 since3.1 增加了shutdown方法调用结束shundown ConnectionManager
public void releaseConnection(HttpConnection conn) {
if (conn != httpConnection) {
throw new IllegalStateException("Unexpected release of an unknown connection.");
}
if (this.alwaysClose) {
httpConnection.close();
} else {
// make sure the connection is reuseable
finishLastResponse(httpConnection);
}
inUse = false;
// track the time the connection was made idle
idleStartTime = System.currentTimeMillis();
}
分享到:
相关推荐
《HttpClient 3.1:深入理解与应用》 HttpClient是一个由Apache基金会开发的Java库,主要用于执行HTTP请求,实现客户端的HTTP通信。本手册将详细探讨HttpClient 3.1版本,包括其源代码分析和使用指南,帮助开发者...
以下是对HttpClient3.1及其相关组件的详细解释: 1. **HttpClient**:HttpClient是Apache软件基金会的Jakarta项目的一部分,它提供了一套强大的API,使得开发者可以方便地执行HTTP请求,处理HTTP响应,并实现复杂的...
除了上述的基本SSL配置,HttpClient 3.1 还提供了许多高级特性,例如: - **连接池管理**:HttpClient允许设置连接池,复用已建立的TCP连接,提高性能。 - **请求重试策略**:当网络不稳定时,HttpClient可以配置重...
**HttpClient 3.1简介** HttpClient 3.1是Apache软件基金会的一个项目,它为Java开发者提供了一个功能强大的客户端编程工具包,可以用来实现复杂的HTTP协议操作。这个版本主要关注于稳定性和兼容性,适用于那些需要...
在处理需要登录和认证的网页时,HttpClient3.1 提供了支持。它允许你在发送请求前进行身份验证,通过设置`CredentialsProvider`来存储用户名和密码,并使用`PreemptiveAuthentication`策略,使得服务器在请求头中就...
《HttpClient 3.1在Android开发中的应用及详解》 HttpClient是Apache软件基金会的一个开源项目,提供了强大的HTTP客户端实现,广泛应用于Java平台的网络通信。本文主要围绕"HttpClient 3.1"版本,探讨其在Android...
本篇文章将深入探讨HttpClient 3.1的核心功能、主要类与接口、使用场景以及常见问题。 一、核心功能 1. **HTTP方法支持**:HttpClient 3.1 支持GET、POST、PUT、DELETE等多种HTTP方法,可以设置请求头、发送表单...
《Apache Commons HttpClient 3.1详解》 Apache Commons HttpClient 是一个功能强大的Java库,专为实现客户端HTTP通信而设计。这个3.1版本是HttpClient的一个重要里程碑,它提供了丰富的功能和改进,使得开发者能够...
标题中的"commons-httpclient3.1.jar,commons-codec1.3.jar,commons-logging1.1.1.jar"指的是三个关键的Java库文件,它们是Apache HttpClient项目的一部分,用于在Java应用程序中实现HTTP通信。这些JAR(Java ...
《Apache HttpClient 3.1详解及其在Java中的应用》 Apache HttpClient是一个强大的HTTP客户端实现库,主要用于构建Java应用程序,以实现对HTTP协议的全面、灵活且高效的处理。在这个专题中,我们将深入探讨Apache ...
《Apache Commons HttpClient 3.1 Java API详解》 Apache Commons HttpClient 3.1 是一个功能强大的Java HTTP客户端库,它提供了全面的HTTP协议支持,包括基本的GET和POST请求、Cookie管理、重定向处理以及HTTPS...
《Apache Commons HttpClient 3.1:HTTP客户端编程的基石》 ...然而,需要注意的是,HttpClient 3.1已不再维护,最新的稳定版本为HttpClient 4.x,对于新项目建议使用更现代的版本以获取更好的性能和兼容性。
《HttpClient 3.1 JavaDoc CHM版》详解 HttpClient 是一个开源的Java库,由Apache软件基金会维护,主要用于执行HTTP请求。这个CHM(Compiled Help Manual)版本的JavaDoc文档是HttpClient 3.1版本的官方API参考,它...
《Apache Commons HttpClient 3.1在安卓开发中的应用详解》 Apache Commons HttpClient 是一个功能强大的HTTP客户端库,尤其在早期的Android开发中,它被广泛用于处理网络请求和响应。这个压缩包文件"commons-...
httpclient 3.1已经改写,不需要再设定字符编码统一设定为UTF-8
《使用Apache Commons HttpClient 3.1进行短信发送详解》 在Java开发中,发送短信是一项常见的功能,尤其在验证码验证、通知服务等方面有着广泛的应用。Apache Commons HttpClient 3.1是一个强大的HTTP客户端库,它...
HttpClient是Apache软件基金会的一个开源项目,...不过要注意,尽管HttpClient 3.1是一个经典版本,但为了保持代码的现代性和兼容性,推荐考虑升级到HttpClient 4.x或更高版本,因为这些新版本引入了更多改进和优化。