您的位置:首页 > 理论基础 > 计算机网络

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

2015-02-04 22:07 288 查看
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);


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

HttpHostgoogleResearch=newHttpHost("research.google.com",80);
HttpHostwikipediaEn=newHttpHost("en.wikipedia.org",80);
cm.setMaxPerRoute(newHttpRoute(googleResearch),30);
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连接池和合理使用来增加系统响应速度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: