HTTP 连接是无状态的,HTTP1.1 默认是长连接,HTTP1.0 也可以通过在请求头中设置 Connection:keep-alive 来开启长连接。
为什么要用Http连接池?
1、降低延迟
如果不采用连接池,每次连接发起Http请求的时候都会重新建立TCP连接(经历3次握手),用完就会关闭连接(4次挥手),如果采用连接池则减少了这部分时间损耗
2、支持更大的并发
如果不采用连接池,每次连接都会打开一个端口,在大并发的情况下系统的端口资源很快就会被用完,导致无法建立新的连接
httpclient-4.5.12.jar 提供了 PoolingHttpClientConnectionManager 来实现 HTTP 连接的池化管理,其管理连接的基本单位是 HttpRoute(路由),每个路由上都会维护一定数量的 HTTP 连接。这里的 Route 的概念可以理解为客户端机器到目标机器的一条线路,例如使用HttpClient的实现来分别请求 www.163.com 的资源和 www.sina.com 的资源就会产生两个route。
缺省条件下对于每个Route,HttpClient仅维护2个连接,总数不超过20个连接,如果需要调整默认配置,可以使用 ConnPoolControl 方法进行调整连接限制。
org.apache.http.impl.conn.PoolingHttpClientConnectionManager