http網絡通信框架解讀(HttpClient、HttpURLConnection、OKHttp、Unirest、Volley、Xutils、Retrofit )


一、HttpClient與HttpURLConnection,URLConnection

  HttpURLConnection繼承URLConnection,底層socket,最原始通信,使用 HttpURLConnection 發起 HTTP 請求最大的優點是不需要引入額外的依賴。但無法提供額外的功能,如cookie,登錄,同時,也缺乏連接池管理、域名機械控制等特性支持。

       HttpClient是apache的一個項目,封裝了很多底層細節。Apache HttpComponents HttpClient 的前身是 Apache Commons HttpClient, 但是 Apache Commons HttpClient 已經停止開發,如果你還在使用它,請切換到 Apache HttpComponents HttpClient 上來。HttpClient相比傳統JDK自帶的URLConnection,增加了易用性和靈活性,它不僅使客戶端發送HTTP請求變得容易,而且也方便了開發人員測試接口(基於Http協議的),即提高了開發的效率,也方便提高代碼的健壯性。

      JDK 自帶的 HttpURLConnection 標准庫; Apache HttpComponents HttpClient, 以及基於該庫的 wrapper, 如 Unirest. 非基於 Apache HttpComponents HttpClient, 大量重寫應用層代碼的 HTTP client 組件庫,典型代表是 OkHttp. HttpURLConnectio。

 

二、OKHttp  

  由於當前 Apache HttpComponents HttpClient 版本並不支持 HTTP/2, 而 HTTP/2 對於移動客戶端而言,無論是從握手延遲、響應延遲,還是資源開銷看都有相當吸引力。因此這就給了高層次封裝且支持 HTTP/2 的 http client lib 足夠的生存空間。其中最典型的要數OkHttp。

OkHttp 接口設計友好,支持 HTTP/2,並且在弱網和無網環境下有自動檢測和恢復機制,因此,是當前 Android APP 開發中使用最廣泛的 HTTP clilent lib 之一。

另一方面,OkHttp 提供的接口與 Java 9 中 HttpClint 接口比較類似 (嚴格講,應該是 Java 9 借鑒了 OkHttp 等開源庫的接口設計?),因此,對於喜歡減少依賴,鍾情於原生標准庫的開發者來說,在 Java 11 中,從 OkHttp 切換到標准庫是相對容易的。因此,以 OkHttp 為代表的 http 庫以后的使用場景可能會被蠶食一部分。

 

三、Unirest
  Unirest一款輕量級的HTTP客戶端庫。支持多種語言,通過Mashape構建和維護。是一個比較少見的類庫,它是對httpclient4的一層封裝,調用方式跟okhttp差不多。unirest從它的名字,可以看得出,專門為了rest服務調用而生的。它的一大特點是提供了,多種語言同樣的調用語義。node/python/java/c#/ruby/oc這些常用語言都有名為unirest的庫,調用語義都大同小異。另一大特點是直接集成了對json序列化和反序列化的支持,可以對json結果直接解析出對象或者是返回可操作的json對象。可以參考 https://www.cnblogs.com/zhangshihai1232/articles/6062507.html

 

四、Volley
  Volley是google在2013 io大會上推出的網絡通信框架,特別適合處理數據量小,通信頻繁的網絡操作。優點是內部封裝了異步線程,可直接在主線程請求網絡,並處理返回的結果。同時可以取消請求,容易擴展。缺點是:面對大數據量的請求,比如下載表現糟糕,不支持https。Volley的底層在針對android2.3以下系統使用httpclicent,在android2.3以上采用HttpUrlConnection請求網絡。可以參考https://blog.csdn.net/guolin_blog/article/details/17482095

 

五、Xutils

 Xutils是前幾年比較火得一個開源框架,Xutils包含了很多實用的工具類,支持大文件上傳,且有更全面的http請求協議支持,擁有靈活的Orm,支持事件注解且不受代碼混淆影響。Xutils剛問世的時候真是很多屌絲程序猿的福利啊,集成了這么多功能強大的模塊,大家果然都愛不釋手,但是隨着Android版本的升級和人們開發軟件思想的轉變,Xutils也暴露出了很多問題,現在用Xutils的已經不是特別的多了,如果想使用的話,推薦使用比較新的Xutils3。主要用於android,可以參考https://blog.csdn.net/QPC908694753/article/details/77142124

 

 六、Retrofit 

  Retrofit 是一個用於 Android 和 Java 平台的類型安全的網絡請求框架。Retrofit 通過將 API 抽象成 Java 接口而讓我們連接到 REST web 服務變得很輕松。和OkHttp同樣出自Square公司,Retrofit內部依賴於OkHttp,但是功能上做了更多的擴展,比如返回結果的轉換功能,可以直接對返回數據進行處理。可以參考 https://juejin.im/post/5c0fbcf6518825642650b875 及 https://www.jianshu.com/p/d7f0d9101b32


參考

https://juejin.im/post/5bae03b25188255c5442b66f

https://www.cnblogs.com/sharpest/p/7831350.html

https://blog.csdn.net/langtop/article/details/77972855

https://blog.csdn.net/imlsz/article/details/57616083

https://blog.csdn.net/bigbigsman/article/details/90707669


免責聲明!

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



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