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

来源:互联网 发布:linq for java 编辑:程序博客网 时间:2024/06/07 08:37

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. HttpHostgoogleResearch=newHttpHost("research.google.com",80);
  2. HttpHostwikipediaEn=newHttpHost("en.wikipedia.org",80);
  3. cm.setMaxPerRoute(newHttpRoute(googleResearch),30);
  4. cm.setMaxPerRoute(newHttpRoute(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 可以使用tomcat的长连接和htppclient连接池和合理使用来增加系统响应速度。

0 0
原创粉丝点击