`
xiaoZ5919
  • 浏览: 404680 次
  • 性别: Icon_minigender_1
  • 来自: 安平人@北京
博客专栏
Group-logo
Netty学习笔记
浏览量:73191
社区版块
存档分类
最新评论

httpclient3.1的relaseConnection的misunderstand

    博客分类:
  • java
 
阅读更多
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();
    }

0
0
分享到:
评论

相关推荐

    httpclient 3.1 jar包 手册 源代码

    《HttpClient 3.1:深入理解与应用》 HttpClient是一个由Apache基金会开发的Java库,主要用于执行HTTP请求,实现客户端的HTTP通信。本手册将详细探讨HttpClient 3.1版本,包括其源代码分析和使用指南,帮助开发者...

    HttpClient3.1.jar

    以下是对HttpClient3.1及其相关组件的详细解释: 1. **HttpClient**:HttpClient是Apache软件基金会的Jakarta项目的一部分,它提供了一套强大的API,使得开发者可以方便地执行HTTP请求,处理HTTP响应,并实现复杂的...

    HttpClient 3.1 Jar包

    除了上述的基本SSL配置,HttpClient 3.1 还提供了许多高级特性,例如: - **连接池管理**:HttpClient允许设置连接池,复用已建立的TCP连接,提高性能。 - **请求重试策略**:当网络不稳定时,HttpClient可以配置重...

    httpclient3.1 需要的jar

    **HttpClient 3.1简介** HttpClient 3.1是Apache软件基金会的一个项目,它为Java开发者提供了一个功能强大的客户端编程工具包,可以用来实现复杂的HTTP协议操作。这个版本主要关注于稳定性和兼容性,适用于那些需要...

    HttpClient3.1 学习整理

    在处理需要登录和认证的网页时,HttpClient3.1 提供了支持。它允许你在发送请求前进行身份验证,通过设置`CredentialsProvider`来存储用户名和密码,并使用`PreemptiveAuthentication`策略,使得服务器在请求头中就...

    httpclient-3.1

    《HttpClient 3.1在Android开发中的应用及详解》 HttpClient是Apache软件基金会的一个开源项目,提供了强大的HTTP客户端实现,广泛应用于Java平台的网络通信。本文主要围绕"HttpClient 3.1"版本,探讨其在Android...

    commons-httpClient 3.1 jar和src

    本篇文章将深入探讨HttpClient 3.1的核心功能、主要类与接口、使用场景以及常见问题。 一、核心功能 1. **HTTP方法支持**:HttpClient 3.1 支持GET、POST、PUT、DELETE等多种HTTP方法,可以设置请求头、发送表单...

    commons-httpclient-3.1jar包

    《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

    标题中的"commons-httpclient3.1.jar,commons-codec1.3.jar,commons-logging1.1.1.jar"指的是三个关键的Java库文件,它们是Apache HttpClient项目的一部分,用于在Java应用程序中实现HTTP通信。这些JAR(Java ...

    commons-httpclient-3.1.jar

    《Apache HttpClient 3.1详解及其在Java中的应用》 Apache HttpClient是一个强大的HTTP客户端实现库,主要用于构建Java应用程序,以实现对HTTP协议的全面、灵活且高效的处理。在这个专题中,我们将深入探讨Apache ...

    commons-httpclient-3.1 java API详细index格式文档

    《Apache Commons HttpClient 3.1 Java API详解》 Apache Commons HttpClient 3.1 是一个功能强大的Java HTTP客户端库,它提供了全面的HTTP协议支持,包括基本的GET和POST请求、Cookie管理、重定向处理以及HTTPS...

    org.apache.commons.httpclient-3.1.jar

    《Apache Commons HttpClient 3.1:HTTP客户端编程的基石》 ...然而,需要注意的是,HttpClient 3.1已不再维护,最新的稳定版本为HttpClient 4.x,对于新项目建议使用更现代的版本以获取更好的性能和兼容性。

    httpclient3.1 javadoc chm版

    《HttpClient 3.1 JavaDoc CHM版》详解 HttpClient 是一个开源的Java库,由Apache软件基金会维护,主要用于执行HTTP请求。这个CHM(Compiled Help Manual)版本的JavaDoc文档是HttpClient 3.1版本的官方API参考,它...

    commons-httpclient-3.1.rar

    《Apache Commons HttpClient 3.1在安卓开发中的应用详解》 Apache Commons HttpClient 是一个功能强大的HTTP客户端库,尤其在早期的Android开发中,它被广泛用于处理网络请求和响应。这个压缩包文件"commons-...

    httpclient 3.1 改写版

    httpclient 3.1已经改写,不需要再设定字符编码统一设定为UTF-8

    commons-httpclient-3.1短信发送包

    《使用Apache Commons HttpClient 3.1进行短信发送详解》 在Java开发中,发送短信是一项常见的功能,尤其在验证码验证、通知服务等方面有着广泛的应用。Apache Commons HttpClient 3.1是一个强大的HTTP客户端库,它...

    HttpClient 3.1+logging 1.2+codec 1.11

    HttpClient是Apache软件基金会的一个开源项目,...不过要注意,尽管HttpClient 3.1是一个经典版本,但为了保持代码的现代性和兼容性,推荐考虑升级到HttpClient 4.x或更高版本,因为这些新版本引入了更多改进和优化。

Global site tag (gtag.js) - Google Analytics