httpclient httpclient连接回收
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连接回收的更多相关文章
- 对于System.Net.Http的学习(二)——使用 HttpClient 进行连接
对于System.Net.Http的学习(一)——System.Net.Http 简介 使用 HttpClient 进行连接 使用 System.Net.Http 命名空间中的 HttpClient ...
- 使用 HttpClient 进行连接
对于System.Net.Http的学习(二)——使用 HttpClient 进行连接 对于System.Net.Http的学习(一)——System.Net.Http 简介 使用 HttpCl ...
- httpclient httpclient使用连接池
httpclient使用连接池 http协议是无状态的,但毕竟是基于tcp的,底层还是需要和服务器连接的, 对于需要从同一个站点抓取大量网页的程序,应该使用连接池,否则每次抓取都和web站点建立连接, ...
- org.apache.commons.httpclient.HttpClient的使用(转)
HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 java net包中已经提供了访 ...
- org.apache.http.client.HttpClient; HttpClient 4.3超时设置
可用的code import org.apache.commons.lang.StringUtils;import org.apache.http.HttpEntity;import org.apac ...
- httpclient 释放连接的问题 Invalid use of SingleClientConnManager: connection still allocated
Invalid use of SingleClientConnManager: connection still allocated httpPost.releaseConnection(); 该代 ...
- 转 HttpClient 设置连接超时时间
要: HttpClient 4.5版本升级后,设置超时时间的API又有新的变化,请大家关注. HttpClient升级到4.5版本后,API有很多变化,HttpClient 4之后,API一直没有太稳 ...
- HttpClient设置连接超时时间
https://www.cnblogs.com/winner-0715/p/7087591.html 使用HttpClient,一般都需要设置连接超时时间和获取数据超时时间.这两个参数很重要,目的是为 ...
- HttpClient 基于连接池的使用
场景:调用外部系统接口的http请求 要求: 1:可能是http请求,也可能是https请求 2:需要加入连接池的概念,不能每次发起请求都新建一个连接(每次连接握手三次,效率太低) 准备使用httpc ...
随机推荐
- 20145328《网络对抗技术》Final
系内选拔赛write-up 1 信息隐藏 第一题图片藏东西,后缀名改txt,没有发现,改rar,发现压缩包内存在key.txt,解压提示存在密码,尝试使用修复,得到key.txt,打开获取flag,S ...
- cogs 1962. [HAOI2015]树上染色
★★☆ 输入文件:haoi2015_t1.in 输出文件:haoi2015_t1.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 有一棵点数为N的树,树边有边 ...
- 【angular2+typeScript+ng-zorro】Carousel 走马灯的左右方向控件实现
ng-zorro Carousel 走马灯的左右方向控件实现 ng-zorro框架的走马灯本身还没有左右方向控件的实现,作者只是在文档中(0.6x)中曝出几个方法接口,如图: 实现: 在根compon ...
- P3901 数列找不同
P3901 数列找不同 题目描述 现有数列 \(A_1,A_2,\cdots,A_N\) ,Q 个询问 \((L_i,R_i)\) , \(A_{Li} ,A_{Li+1},\cdots,A_{Ri} ...
- POJ 3468 A Simple Problem with Integers(线段树&区间更新)题解
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
- 51nod 1284 2 3 5 7的倍数
从1到N 里 是2的倍数 有 N/2 个 然后大概看过这类的blog 所以运用容斥原理 直接计算 是 2 3 5 7 的个数都是多少 然后用N 减去 就是 不是2 3 5 7 的个数了 (离散好像也 ...
- each遍历小结
JQ中的遍历函数 (逐个加工函数) 格式: $(‘.box p’).each(function(index,element){ })也可以写成 $.each(‘.box p’,function(ind ...
- HDU 4587 TWO NODES(割两个点的最大连通分支数)
http://acm.hdu.edu.cn/showproblem.php?pid=4587 题意: 给一图,求割去两个点后所能形成的最大连通分支数. 思路: 对于这种情况,第一个只能枚举,然后在删除 ...
- 机器学习-数据可视化神器matplotlib学习之路(三)
之前学习了一些通用的画图方法和技巧,这次就学一下其它各种不同类型的图.好了先从散点图开始,上代码: from matplotlib import pyplot as plt import numpy ...
- VS2013_CodeLens
CodeLens 只有VS2013 旗舰版 (update 2及以上) 才可以用,高级版 专业版都没有. 如何打开CodeLens呢?在VS菜单栏 >> 工具 >> 选项 &g ...