httpclient连接释放

 httpClient必须releaseConnection,但不是abort。因为releaseconnection是归还连接到到连接池,而abort是直接抛弃这个连接,
而且占用连接池的数目。
HttpGet httpget = new HttpGet(url);
httpGet.releaseConnection();

连接回收策略

   经典的IO阻塞模式有一个主要的缺点,就是当IO操作被阻塞的时候,网络socket只对I/O事件影响。
当一个连接释放回管理器,它会保持活跃,然后它不会监听socket的状态和任何IO事件。如果这个连接在服务器端被关闭,客户端的连接在连接状态下不会检测出这个改变。
HttpClient通过测试连接是否为"陈腐的"而尝试去缓解这个问题,"陈腐的"是指不再是有效的,因为它会被服务器端关闭掉。并会在这之前为了正执行中的HTTP请求去使用连接。
"陈腐的"连接检测不是百分之百有效的,并且会给每个请求执行增加10毫秒,为了空闲连接,唯一有效的解决方法是在每个socket模型里不包含一个线程,有一个专门的监听线程是被用来驱逐已经过期不活跃的长连接的。这个监听线程会周期中的调用ClientConnectionManager #closeExpiredConnections()方法去关闭所有已经过期的连接并从连接池里驱逐已经关闭的连接。在超过指定的过期后,也可以随意地调用ClientConnectionManager#closeIdleConnections()方法来关闭所有连接。
public static class IdelConnectionMonitorThread extends Thread{
 private final HttpClientConnectionManager connMgr;
 private volatile boolean shutdown;
 
 public IdleConnectionMonitorThread(HttpClientManager connMgr){
   super();
   this.connMgr = connMgr;
}

 public void run(){
   try{
      while(!shutdown){
         synchronized(this){
            wait(5000);
            //Close expired connections
            connMgr.closeExpiredConnections();
            //Optionally close connections that have bean idle longer than 30 sec
            connMgr.closeIdelConnections(30,TimeUnit.SECONDS);
        }
      }
  }catche(Exception e){
      //terminate
  }
}

 public void shutdown(){
    shutdown=true;
    synchronized(this){
     notifyAll();
    }
}
}

httpclient httpclient连接回收的更多相关文章

  1. 对于System.Net.Http的学习(二)——使用 HttpClient 进行连接

    对于System.Net.Http的学习(一)——System.Net.Http 简介  使用 HttpClient 进行连接 使用 System.Net.Http 命名空间中的 HttpClient ...

  2. 使用 HttpClient 进行连接

    对于System.Net.Http的学习(二)——使用 HttpClient 进行连接   对于System.Net.Http的学习(一)——System.Net.Http 简介  使用 HttpCl ...

  3. httpclient httpclient使用连接池

    httpclient使用连接池 http协议是无状态的,但毕竟是基于tcp的,底层还是需要和服务器连接的, 对于需要从同一个站点抓取大量网页的程序,应该使用连接池,否则每次抓取都和web站点建立连接, ...

  4. org.apache.commons.httpclient.HttpClient的使用(转)

    HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 java net包中已经提供了访 ...

  5. org.apache.http.client.HttpClient; HttpClient 4.3超时设置

    可用的code import org.apache.commons.lang.StringUtils;import org.apache.http.HttpEntity;import org.apac ...

  6. httpclient 释放连接的问题 Invalid use of SingleClientConnManager: connection still allocated

    Invalid use of SingleClientConnManager: connection still allocated httpPost.releaseConnection();  该代 ...

  7. 转 HttpClient 设置连接超时时间

    要: HttpClient 4.5版本升级后,设置超时时间的API又有新的变化,请大家关注. HttpClient升级到4.5版本后,API有很多变化,HttpClient 4之后,API一直没有太稳 ...

  8. HttpClient设置连接超时时间

    https://www.cnblogs.com/winner-0715/p/7087591.html 使用HttpClient,一般都需要设置连接超时时间和获取数据超时时间.这两个参数很重要,目的是为 ...

  9. HttpClient 基于连接池的使用

    场景:调用外部系统接口的http请求 要求: 1:可能是http请求,也可能是https请求 2:需要加入连接池的概念,不能每次发起请求都新建一个连接(每次连接握手三次,效率太低) 准备使用httpc ...

随机推荐

  1. 20145331魏澍琛 《网络对抗技术》 PC平台逆向破解

    20145331魏澍琛 <网络对抗技术> PC平台逆向破解 学习任务 1.shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中 ...

  2. cmd命令安装、卸载、启动和停止Windows Servic

    1.运行--〉cmd:打开cmd命令框 2.在命令行里定位到InstallUtil.exe所在的位置 InstallUtil.exe 默认的安装位置是在C:/Windows/Microsoft.NET ...

  3. UVA 11426 GCD - Extreme (II) (欧拉函数)题解

    思路: 虽然看到题目就想到了用欧拉函数做,但就是不知道怎么做... 当a b互质时GCD(a,b)= 1,由此我们可以推出GCD(k*a,k*b)= k.设ans[i]是1~i-1与i的GCD之和,所 ...

  4. 51nod 1020 逆序排列 递推DP

    1020 逆序排列  基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么 ...

  5. perl入门知识(2)

    交互式编程你可以在命令行中使用 -e 选项来输入语句来执行代码,实例如下:$ perl -e 'print "Hello World\n"'输入以上命令,回车后,输出结果为:Hel ...

  6. Unity3D学习笔记(十二):2D模式和异步资源加载

    2D模式和3D模式区别:背景纯色,摄像机2D,没有深度轴 精灵图片设置 Normal map,法线贴图,更有立体感 Sprite (2D and UI),2D精灵贴图,有两种用途 1.当做UI贴图 2 ...

  7. 04_Windows平台Spark开发环境构建

    Spark的开发环境,可以基于IDEA+Scala插件,最终将打包得到的jar文件放入Linux服务器上的Spark上运行 如果是Python的小伙伴,可以在Windows上部署spark+hadoo ...

  8. 【Python】【数据类型】

    [序列更新&散列&切片]"""from array import arrayimport reprlibarray1 = array('d',(1,2,3 ...

  9. python ros 关闭节点

    def myhook(): print "shutdown time!" rospy.on_shutdown(myhook) 或 rospy.signal_shutdown(rea ...

  10. bootstrap3显示5列的方法

    bootstrap是个12栅格的系统,显示5列比较麻烦,今天用到到网上找了找方法,尝试成功,记录一下,以后好用. 需要自己再添加几个 css class样式: <style> .col-l ...