天天看點

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 的時候,大并發對外做網絡請求的時候,前期請求耗時還好,後面耗時越來越高。下面是我之前的實作代碼:

(完)