http连接池配置需要注意的地方

       众所周知,httpclient是java开发中非常常见的一种访问网络资源的方式了。这里不再赘述httpclient强大的功能使用了,比如 读取网页(HTTP/HTTPS)内容,GET或者POST方式向网页提交参数,处理页面重定向,模拟输入用户名和口令进行登录,提交XML格式参数,通过HTTP上传文件,访问启用认证的页面以及httpclient在多线程下的使用.

这里说一下多线程模式下使用httpclient连接池的使用注意事项:

org.apache.http.impl.conn.PoolingClientConnectionManager;

使用这个类就可以使用httpclient连接池的功能了,其可以设置最大连接数和最大路由连接数。

 public final static int MAX_TOTAL_CONNECTIONS = 400;  
 public final static int MAX_ROUTE_CONNECTIONS = 200;  
	cm = new PoolingClientConnectionManager();  
        cm.setMaxTotal(MAX_TOTAL_CONNECTIONS);  
        cm.setDefaultMaxPerRoute(MAX_ROUTE_CONNECTIONS); 

最大连接数就是连接池允许的最大连接数,最大路由连接数就是没有路由站点的最大连接数,比如:

  1. HttpHost googleResearch = new HttpHost("research.google.com"80);  
  2.     HttpHost wikipediaEn = new HttpHost("en.wikipedia.org"80);  
  3.     cm.setMaxPerRoute(new HttpRoute(googleResearch), 30);  
  4.     cm.setMaxPerRoute(new HttpRoute(wikipediaEn), 50); 

并且可以设置httpclient连接等待请求等待时间,相应时间等。

说几个要注意点:

1.首先配置最大连接数和最大路由连接数,如果你要连接的url只有一个,两个必须配置成一样,否则只会取最小值。(这是个坑,默认最大连接是20,每个路由最大连接是2)

2.最好配置httpclient连接等待时间,和相应时间。否则就会一直等待。

httpParams = new BasicHttpParams();  
httpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,CONNECT_TIMEOUT);  
httpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, READ_TIMEOUT);  


3 httpclient必须releaseconnection,但不是abort。因为releaseconnection是归还连接到连接池,而abort是直接抛弃这个连接,而且占用连接池的数目。(一定要注意)
HttpGet httpGet = new HttpGet(searchurl);
httpGet.releaseConnection();


4 (一定要注意)httpclient设置的最大连接数绝对不能超过tomcat设置的最大连接数,否则tomcat的连接就会被httpclient连接池一直占用,直到系统挂掉。


5 在具体使用httpclient获取数据的时候,在没有得到值之前,或者在值没有读取结束之前,不能releaseconnection,如果release,会出现一个很神奇的现象:如果这个连接被连接池回收了,那程序没有问题,可以正常相应,如果被连接池关闭了的话,那么程序就会报socket closed的错误了


6 可以使用tomcat的长连接和htppclient连接池和合理使用来增加系统响应速度。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值