在Java Web中,我们一般使用HttpComponent发起网络请求。HttpComponent获取分为两步:
1、获取到HttpClient
2、发起请求
今天来看一下如何配置HttpClient来达到我们想要的效果
一、连接池与设置HttpClient连接池数
HTTPComponent中有连接池的概念,比如我们有一个连接 连接了www.baidu.com ,那么当这个连接使用完毕后,下一个线程想要请求 www.baidu.com ,就可以直接使用这个连接,这是连接池的概念,那么我们如何去设置连接池的大小呢?
HTTPComponent中有两个连接管理器,一个是 BasicHttpClientConnectionManager ,一个是PoolingHttpClientConnectionManager。 BasicHttpClientConnectionManager 同一时间只能有一个连接,所以我们基本上不用,而PoolingHttpClientConnectionManager则为几乎所有人使用的连接管理器,也就是我们所说的连接池。
设置poolSize:
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
// MaxPerRoute 设置一路有多大的缓存,比如访问 www.baidu.com 的为一路,那么访问 www.baidu.com 的连接最大限制到多少,比如是100,那么最多限制100个连接 www.baidu.com 的
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100);
// 最多对外多少个连接,比如为 200 ,则为最大对外200个连接
poolingHttpClientConnectionManager.setMaxTotal(200);
注意连接不像连接数据库那样永远只有一种连接,HttpComponent中不同的域名是不同路的连接,连接成功后不能共用,所以 setDefaultMaxPerRoute 是设置相同路的最大连接数,setMaxTotal是设置最大的所有连接数。
二、如何设置默认的 connectionRequestTimeOut、connectionTi