天天看点

Http请求连接池 - HttpClient 的 PoolingHttpClientConnectionManager

两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间。http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大。但是如果我们直接使用已经建立好的http连接,这样花费就比较小,吞吐率更大。

传统的httpurlconnection并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。对于网络请求这种底层相对复杂的操作,个人以为如果有可用的其他方案,也没有必要自己去管理连接对象。

除了httpurlconnection,大家肯定还知道httpclient。一般情况下,普通使用httpclient已经能满足我们的需求,不过有时候,在我们需要高并发大量的请求网络的时候,还是用“连接池”这样的概念能提升吞吐量。

我们来看下怎么使用 org.apache.httpcomponents.httpclient(版本4.4)提供的连接池来实现我们的高并发网络请求。

使用到的jar包:

org\apache\httpcomponents\httpclient\4.4-beta1\httpclient-4.4-beta1.jar

org\apache\httpcomponents\httpclient-cache\4.4-beta1\httpclient-cache-4.4-beta1.jar

org\apache\httpcomponents\httpcore\4.4-beta1\httpcore-4.4-beta1.jar

下面代码实例中主要使用到 poolinghttpclientconnectionmanager

post使用方法

一开始我是使用传统的 httpurlconnection 来做网络请求的,查了很多资料,有不少说 httpurlconnection 效率高的。可是经过我修改实现方法后,httpclient 连接池版本的网络请求相对比较稳定。这也说明,我们并不请尽信他人解说,凡事还是要寻找适合自己的方法,真正的解决自己的问题,才是王道。

===========================================

在使用 httpurlconnection 的时候,大并发对外做网络请求的时候,前期请求耗时还好,后面耗时越来越高。下面是我之前的实现代码:

(完)