HttpClient4
HTTP Client4.0的ThreadSafeClientConnManager实现了HTTP连接的池化管理,其管理连接的基本单位是Route(路由),每个路由上都会维护一定数量的HTTP连接。这里的Route的概念可以理解为客户端机器到目标机器的一条线路,例如使用HttpClient的实现来分别请求 www.163.com 的资源和 www.sina.com 的资源就会产生两个route。缺省条件下对于每个Route,HttpClient仅维护2个连接,总数不超过20个连接,显然对于大多数应用来讲,都是不够用的,可以通过设置HTTP参数进行调整。
- HttpParams params = new BasicHttpParams();
- //将每个路由的最大连接数增加到200
- ConnManagerParams.setMaxTotalConnections(params,200);
- // 将每个路由的默认连接数设置为20
- ConnPerRouteBean connPerRoute = new ConnPerRouteBean(20);
- // 设置某一个IP的最大连接数
- HttpHost localhost = new HttpHost("locahost", 80);
- connPerRoute.setMaxForRoute(new HttpRoute(localhost), 50);
- ConnManagerParams.setMaxConnectionsPerRoute(params, connPerRoute);
- SchemeRegistry schemeRegistry = new SchemeRegistry();
- schemeRegistry.register(
- new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
- schemeRegistry.register(
- new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
- ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
- HttpClient httpClient = new DefaultHttpClient(cm, params);
可以配置的HTTP参数有:
1) http.conn-manager.timeout 当某一线程向连接池请求分配线程时,如果连接池已经没有可以分配的连接时,该线程将会被阻塞,直至http.conn-manager.timeout超时,抛出ConnectionPoolTimeoutException。
2) http.conn-manager.max-per-route 每个路由的最大连接数;
3) http.conn-manager.max-total 总的连接数;