一、前言
为何要用http连接池那?因为使用它我们可以得到以下好处:
因为使用它可以有效降低延迟和系统开销。如果不采用连接池,每当我们发起http请求时,都需要重新发起Tcp三次握手建立链接,请求结束时还需要四次挥手释放链接。而链接的建立和释放是有时间和系统开销的。另外每次发起请求时,需要分配一个端口号,请求完毕后在进行回收。
使用链接池则可以复用已经建立好的链接,一定程度的避免了建立和释放链接的时间开销。
二、连接池使用
public static void init() {
//1.创建连接池管理器
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(60000,//1.1
TimeUnit.MILLISECONDS);
connectionManager.setMaxTotal(1000);//1.2
connectionManager.setDefaultMaxPerRoute(50);//1.3
//2.创建httpclient对象
httpClient = HttpClients.custom()
.setConnectionManager(connectionManager)//2.1
.disableAutomaticRetries()//2.2
.build();
}
如上代码1,我们创建了一个连接池管理器,ClientConnectionPoolManager会维护每个路由维护和最大连接数限制。默认情况下,此实现将为每个给定路由创建不超过2个并发连接,并且总共不超过20个连接。对于许多现实应用程序,这些限制可能证明过于严格。但是,我们可以自由来调整连接限制。
另外构造函数中可以设置持久链接的存活时间TTL(timeToLive),其定义了持久连接的最大使用时间,超过其TTL值的链接不会再被复用。
如上代码1.1我们设置TTL为60s(tomcat服务器默认支持保持60s的链接,超过60s,会关闭客户端的链接)。代码1.2我们设置连接器最多同时支持1000个链接,代码1.3设置每个路由最多支持50个链接。注意这里路由是指IP+PORT或者指域名。如果使用域名来访问则每个域名有自己的链接池,如果使用IP+PORT访问ÿ