七大主流的HttpClient程序比較


  • 在你剛剛選擇從HttpURLConnection轉成Apache Httpclient時,發現好像新出了個okHttp了。
  • 你還在猶豫要不要換成okHttp時,Android已經廢除了Apache Httpclient改用okHttp了。
  • 那這時你開始糾結繼續用Apache Httpclient還是改用okHttp時,okHttp的公司Square又出了Retrofit,網友已經在說既然你都用了okHttp為何不直接使用Retrofit

1、HttpURLConnection:

HttpURLConnection是java的標准類,什么都沒封裝,用起來太原始,不方便,比如重訪問的自定義,以及一些高級功能等。

 

2、java.net.http.HttpClient

jdk11正式啟用自帶HttpClient,代替之前比較舊的HttpURLConnection。其實從java9的jdk.incubator.httpclient模塊遷移到java.net.http模塊,包名由jdk.incubator.http改為java.net.http。

3、Apache HttpClient:

在Android中,AndroidSDK中集成了Apache的HttpClient模塊,HttpClient就是一個增強版的HttpURLConnection,它只是關注於如何發送請求、接收響應,以及管理HTTP連接。如果做好封裝或者使用android-async-http,Afinal,Xutils也能挺簡單的完成http請求,但是Android6.0谷歌因為和Apache更新難以同步等原因吧已經放棄了HttpClient,改於了okHttp。

//httpclient官網示例 ClientMultiThreadedExecution.java  PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(100); CloseableHttpClient httpclient = HttpClients.custom() .setConnectionManager(cm) .build(); ......... } finally { httpclient.close(); } //超時配置到Request級  RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig) .setSocketTimeout(5000) .setConnectTimeout(5000) .setConnectionRequestTimeout(5000) .setProxy(new HttpHost("myotherproxy", 8080)) .build(); 

 

 

4、okHttp:

OkHttp 是 Square 公司開源的針對 Java 和 Android 程序,封裝的一個高性能 http 請求庫。OKHttp 類似於 HttpUrlConnection, 是基於傳輸層實現應用層協議的網絡框架。 而不止是一個 Http 請求應用的庫。

okHttp的優勢:

  • 鏈接復用
  • Response 緩存和 Cookie
  • 默認 GZIP
  • 請求失敗自動重連
  • DNS 擴展
  • Http2/SPDY/WebSocket 協議支持
  • 默認情況下,OKHttp會自動處理常見的網絡問題:像二次連接、SSL的握手問題。
  • 從Android4.4開始HttpURLConnection的底層實現采用的是okHttp.

 

5、Retrofit:


Retrofit 是 Square 公司出品的默認基於 OkHttp 封裝的一套 RESTful 網絡請求框架,,RESTful 可以說是目前流行的一套 api 設計的風格,並不是標准。Retrofit 的封裝可以說是很強大,里面涉及到一堆的設計模式,你可以通過注解直接配置請求,你可以使用不同的 http 客戶端,雖然默認是用 OKhttp ,可以使用不同 Json Converter 來序列化數據,同時提供對 RxJava 的支持,使用 Retrofit + OkHttp + RxJava + Dagger2 可以說是目前比較潮的一套框架,但是需要有比較高的門檻。

Retrofit retrofit =
        new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

 

6、RestTemplate

RestTemplate是 Spring 提供的用於訪問Rest服務的客戶端, RestTemplate 提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率。

 

7、OpenFeign

  • 可插拔的注解支持,包括Feign注解和JAX-RS注解。
  • 支持可插拔的HTTP編碼器和解碼器(Gson,Jackson,Sax,JAXB,JAX-RS,SOAP)。
  • 支持Hystrix和它的Fallback。
  • 支持Ribbon的負載均衡。
  • 支持HTTP請求和響應的壓縮。
  • 靈活的配置:基於 name 粒度進行配置
  • 支持多種客戶端:JDK URLConnection、apache httpclient、okhttp,ribbon)
  • 支持日志
  • 支持錯誤重試
  • url支持占位符
  • 可以不依賴注冊中心獨立運行

 

 

重點來了,總結!!!!!!

總結

  • 在你還在糾結選擇apache httpclient時,Android已經不用它了,改用okhttp了
  • 當你還在糾結選擇apache httpclient還是okhttp時,Square已經出了Retrofit,網友已經在說既然你都用了okhttp為何不直接使用Retrofit

總的來說技術變化更新都比較快,得跟上技術的發展。一般來說沒用使用springcloud話可以選擇Retrofit,如果使用了springcloud可以使用OpenFeign+okHttp。

 

參考文章:

幾個主流網絡框架的比較​www.jianshu.com

 

編輯於 11-03


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM