OkHttp3 簡述

 OkHttp是一個高效的Http客戶端,有以下的特色:

  1. 支持HTTP2/SPDY黑科技
  2. socket自動選擇最好路線,並支持自動重連
  3. 擁有自動維護的socket鏈接池,減小握手次數
  4. 擁有隊列線程池,輕鬆寫併發
  5. 擁有Interceptors輕鬆處理請求與響應(好比透明GZIP壓縮,LOGGING)
  6. 基於Headers的緩存策略

注:什麼是SPDY:http://baike.baidu.com/link?url=yBgdky_0rZCfbxkj2ZY3r46Ior60B62w_2-k9nf8WFrkB3zsttjHL8dQJZrUn1HezXIAaW9mkpqPWJWgfOE_uqjava

SPDY(讀做「SPeeDY」)是 Google開發的基於 TCP的傳輸層協議,用以最小化網絡延遲,提高網絡速度,優化用戶的網絡使用體驗。SPDY並非一種用於替代HTTP的協議,而是對 HTTP協議的加強。新協議的功能包括數據流的多路複用、請求優先級以及HTTP報頭壓縮。谷歌表示,引入SPDY協議後,在實驗室測試中頁面加載速度比原先快64%。中文名:spdy協議,目前SPDY已經被Http/2代替,google已經宣佈要移除SPDY;

主要對象

  • Connections: 對JDK中的socket進行了引用計數封裝,用來控制socket鏈接
  • Streams: 維護HTTP的流,用來對Requset/Response進行IO操做
  • Calls: HTTP請求任務封裝
  • StreamAllocation: 用來控制Connections/Streams的資源分配與釋放

 

 

 工做流程的概述git

當咱們用OkHttpClient.newCall(request)進行execute/enenqueue時,實際是將請求Call放到了Dispatcher中,okhttp使用Dispatcher進行線程分發,它有兩種方法,一個是普通的同步單線程;另外一種是使用了隊列進行併發任務的分發(Dispatch)與回調,咱們下面主要分析第二種,也就是隊列這種狀況,這也是okhttp可以競爭過其它庫的核心功能之一;
github

Socket管理(StreamAllocation)

通過上一步的分配,咱們如今須要進行鏈接了。咱們目前有封裝好的Request,而進行HTTP鏈接須要進行Socket握手,Socket握手的前提是根據域名或代理肯定Socket的ip與端口。這個環節主要講了http的握手過程與鏈接池的管理,分析的對象主要是StreamAllocation緩存

相關文章
相關標籤/搜索