日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

 

在OkHttp3中,其靈活性很大程度上體現在,可以攔截其任意一個環節,而這個優勢便是okhttp3整個請求響應架構體系的精髓所在:

 

架構分析高效HTTP客戶端OkHttp的核心

Okhttp請求流程

 

  • 在OkHttp3中,每一個請求任務都封裝為一個Call,其實現為RealCall。
  • 而所有的策略幾乎都可以通過OkHttpClient傳入
  • 所有全局策略與數據,除了存儲在允許上層訪問的OkHttpClient實例以外,還有一部分是存儲在只允許包可見的Internal.instance中(如連接池、路由黑名單等)
  • OkHttp中用戶可傳入的interceptor分為兩類,一類是全局interceptor,該類interceptor在請求開始之前最早被調用,另外一類為非網頁請求的networkInterceptor,這類interceptor只有在非網頁請求中會被調用,并且是在組裝完成請求之后,真正發起請求之前被調用(這塊具體可以參看RealCall#getResponseWithInterceptorChain()方法)
  • 整個請求過程通過RealInterceptorChain#proceed來連接,在每個interceptor中調用下一個interceptor來完成整個請求流程,并且在回到當前interceptor后完成響應處理
  • 在異步請求中,我們通過Callback來獲得簡單清晰的請求回調(onFailure、onResponse)
  • 在OkHttpClient中,我們可以傳入EventListener的工廠方法,為每一個請求創建一個EventListener,來接收非常細的事件回調
架構分析高效HTTP客戶端OkHttp的核心

 

完整interceptor-chain

OkHttp3中的線程池

OkHttp 中的對所有的任務采用 NamedRunnable,約束每個執行單元給出對應的業務名稱,以便于線程維護。

1.異步請求線程池-OkHttp Dispatcher

架構分析高效HTTP客戶端OkHttp的核心

 

  • 該線程池與Android下的 Executors.newCachedThreadPool() 比較類似;
  • 無任務上限,自動回收閑置60s的線程,適用于大量耗時較短的任務;
  • 雖然線程池無任務上限,但是Dispatcher對入口enqueue()進行了把關,最大的異步任務數默認是64,同一個主機默認是5,當然這兩個默認值是可以修改的,Dispatcher提供的修改接口;

 

架構分析高效HTTP客戶端OkHttp的核心

 

 

  • 通過兩個雙端隊列來維護準備執行的任務和正在執行的任務:Deque<AsyncCall> readyAsyncCalls, Deque<AsyncCall> runningAsyncCalls;
  • 在每個任務結束時,都會檢查 readyAsyncCalls 是否有任務,在條件滿足的情況下,按照先進先出的原則將任務移動到 runningAsyncCalls中,并在線程池中執行;
架構分析高效HTTP客戶端OkHttp的核心

 

異步請求線程池

2.連接池清理線程池-OkHttp ConnectionPool

 

架構分析高效HTTP客戶端OkHttp的核心

 

 

  • 該線程池用來清理長時間閑置的和泄漏的連接;
  • 該線程池本身無任務上限,線程閑置60s自動回收;
  • 雖然任務無上限,但其通過 cleanupRunning 標記來控制只有一個線程在運行,當連接池中沒有連接后才會被重新設置為 false;

 

架構分析高效HTTP客戶端OkHttp的核心

 

 

  • 次工作線程會不斷地清理,當清理完一遍后超時連接后,根據當前連接池中最近的下一個空閑超時連接計算出一個阻塞時間并阻塞,直到連接池中沒有任何連接才結束,并將 cleanupRunning 設為 false;
  • 在每次有連接加入連接池時,如果當前沒有清理任務運行,會加入一個清理任務到到線程池中執行;

 

架構分析高效HTTP客戶端OkHttp的核心

 

 

架構分析高效HTTP客戶端OkHttp的核心

 

連接池清理線程池

3. 緩存整理線程池-OkHttp DiskLruCache

 

架構分析高效HTTP客戶端OkHttp的核心

 

 

  • 該線程池用于整理本地請求緩存數據;
  • 緩存的整理包含: 達到閥值大小的文件,刪除最近最少使用的記錄,在有關操作達到一定數量以后對記錄進行重建;
  • 最大運行線程數1,無需考慮線程安全問題,自動回收閑置60s的線程;

4. HTTP2異步事務線程池-OkHttp Http2Connection

  • HTTP2采用了多路復用,因此需要維護連接有效性,本線程池就是用于維護相關的各類HTTP2事務;
  • 線程池本身無任務上限,自動回收閑置60s的線程;
  • 每一個HTTP2連接都有這么一個線程池存在;


 

分享到:
標簽:HTTP
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定