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

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

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

 

在OkHttp3中,其靈活性很大程度上體現(xiàn)在,可以攔截其任意一個(gè)環(huán)節(jié),而這個(gè)優(yōu)勢(shì)便是okhttp3整個(gè)請(qǐng)求響應(yīng)架構(gòu)體系的精髓所在:

 

架構(gòu)分析高效HTTP客戶(hù)端OkHttp的核心

Okhttp請(qǐng)求流程

 

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

 

完整interceptor-chain

OkHttp3中的線(xiàn)程池

OkHttp 中的對(duì)所有的任務(wù)采用 NamedRunnable,約束每個(gè)執(zhí)行單元給出對(duì)應(yīng)的業(yè)務(wù)名稱(chēng),以便于線(xiàn)程維護(hù)。

1.異步請(qǐng)求線(xiàn)程池-OkHttp Dispatcher

架構(gòu)分析高效HTTP客戶(hù)端OkHttp的核心

 

  • 該線(xiàn)程池與Android下的 Executors.newCachedThreadPool() 比較類(lèi)似;
  • 無(wú)任務(wù)上限,自動(dòng)回收閑置60s的線(xiàn)程,適用于大量耗時(shí)較短的任務(wù);
  • 雖然線(xiàn)程池?zé)o任務(wù)上限,但是Dispatcher對(duì)入口enqueue()進(jìn)行了把關(guān),最大的異步任務(wù)數(shù)默認(rèn)是64,同一個(gè)主機(jī)默認(rèn)是5,當(dāng)然這兩個(gè)默認(rèn)值是可以修改的,Dispatcher提供的修改接口;

 

架構(gòu)分析高效HTTP客戶(hù)端OkHttp的核心

 

 

  • 通過(guò)兩個(gè)雙端隊(duì)列來(lái)維護(hù)準(zhǔn)備執(zhí)行的任務(wù)和正在執(zhí)行的任務(wù):Deque<AsyncCall> readyAsyncCalls, Deque<AsyncCall> runningAsyncCalls;
  • 在每個(gè)任務(wù)結(jié)束時(shí),都會(huì)檢查 readyAsyncCalls 是否有任務(wù),在條件滿(mǎn)足的情況下,按照先進(jìn)先出的原則將任務(wù)移動(dòng)到 runningAsyncCalls中,并在線(xiàn)程池中執(zhí)行;
架構(gòu)分析高效HTTP客戶(hù)端OkHttp的核心

 

異步請(qǐng)求線(xiàn)程池

2.連接池清理線(xiàn)程池-OkHttp ConnectionPool

 

架構(gòu)分析高效HTTP客戶(hù)端OkHttp的核心

 

 

  • 該線(xiàn)程池用來(lái)清理長(zhǎng)時(shí)間閑置的和泄漏的連接;
  • 該線(xiàn)程池本身無(wú)任務(wù)上限,線(xiàn)程閑置60s自動(dòng)回收;
  • 雖然任務(wù)無(wú)上限,但其通過(guò) cleanupRunning 標(biāo)記來(lái)控制只有一個(gè)線(xiàn)程在運(yùn)行,當(dāng)連接池中沒(méi)有連接后才會(huì)被重新設(shè)置為 false;

 

架構(gòu)分析高效HTTP客戶(hù)端OkHttp的核心

 

 

  • 次工作線(xiàn)程會(huì)不斷地清理,當(dāng)清理完一遍后超時(shí)連接后,根據(jù)當(dāng)前連接池中最近的下一個(gè)空閑超時(shí)連接計(jì)算出一個(gè)阻塞時(shí)間并阻塞,直到連接池中沒(méi)有任何連接才結(jié)束,并將 cleanupRunning 設(shè)為 false;
  • 在每次有連接加入連接池時(shí),如果當(dāng)前沒(méi)有清理任務(wù)運(yùn)行,會(huì)加入一個(gè)清理任務(wù)到到線(xiàn)程池中執(zhí)行;

 

架構(gòu)分析高效HTTP客戶(hù)端OkHttp的核心

 

 

架構(gòu)分析高效HTTP客戶(hù)端OkHttp的核心

 

連接池清理線(xiàn)程池

3. 緩存整理線(xiàn)程池-OkHttp DiskLruCache

 

架構(gòu)分析高效HTTP客戶(hù)端OkHttp的核心

 

 

  • 該線(xiàn)程池用于整理本地請(qǐng)求緩存數(shù)據(jù);
  • 緩存的整理包含: 達(dá)到閥值大小的文件,刪除最近最少使用的記錄,在有關(guān)操作達(dá)到一定數(shù)量以后對(duì)記錄進(jìn)行重建;
  • 最大運(yùn)行線(xiàn)程數(shù)1,無(wú)需考慮線(xiàn)程安全問(wèn)題,自動(dòng)回收閑置60s的線(xiàn)程;

4. HTTP2異步事務(wù)線(xiàn)程池-OkHttp Http2Connection

  • HTTP2采用了多路復(fù)用,因此需要維護(hù)連接有效性,本線(xiàn)程池就是用于維護(hù)相關(guān)的各類(lèi)HTTP2事務(wù);
  • 線(xiàn)程池本身無(wú)任務(wù)上限,自動(dòng)回收閑置60s的線(xiàn)程;
  • 每一個(gè)HTTP2連接都有這么一個(gè)線(xiàn)程池存在;


 

分享到:
標(biāo)簽:HTTP
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定