日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

汽車玩家 ? 來源:IT知識課堂 ? 作者:IT知識課堂 ? 2020-05-05 23:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

精髓

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

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

Okhttp請求流程

在OkHttp3中,每一個(gè)請求任務(wù)都封裝為一個(gè)Call,其實(shí)現(xiàn)為RealCall。

而所有的策略幾乎都可以通過OkHttpClient傳入

所有全局策略與數(shù)據(jù),除了存儲(chǔ)在允許上層訪問的OkHttpClient實(shí)例以外,還有一部分是存儲(chǔ)在只允許包可見的Internal.instance中(如連接池、路由黑名單等)

OkHttp中用戶可傳入的interceptor分為兩類,一類是全局interceptor,該類interceptor在請求開始之前最早被調(diào)用,另外一類為非網(wǎng)頁請求的networkInterceptor,這類interceptor只有在非網(wǎng)頁請求中會(huì)被調(diào)用,并且是在組裝完成請求之后,真正發(fā)起請求之前被調(diào)用(這塊具體可以參看RealCall#getResponseWithInterceptorChain()方法)

整個(gè)請求過程通過RealInterceptorChain#proceed來連接,在每個(gè)interceptor中調(diào)用下一個(gè)interceptor來完成整個(gè)請求流程,并且在回到當(dāng)前interceptor后完成響應(yīng)處理

在異步請求中,我們通過Callback來獲得簡單清晰的請求回調(diào)(onFailure、onResponse)

在OkHttpClient中,我們可以傳入EventListener的工廠方法,為每一個(gè)請求創(chuàng)建一個(gè)EventListener,來接收非常細(xì)的事件回調(diào)

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

完整interceptor-chain

OkHttp3中的線程池

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

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

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

該線程池與Android下的 Executors.newCachedThreadPool() 比較類似;

無任務(wù)上限,自動(dòng)回收閑置60s的線程,適用于大量耗時(shí)較短的任務(wù);

雖然線程池?zé)o任務(wù)上限,但是Dispatcher對入口enqueue()進(jìn)行了把關(guān),最大的異步任務(wù)數(shù)默認(rèn)是64,同一個(gè)主機(jī)默認(rèn)是5,當(dāng)然這兩個(gè)默認(rèn)值是可以修改的,Dispatcher提供的修改接口

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

通過兩個(gè)雙端隊(duì)列來維護(hù)準(zhǔn)備執(zhí)行的任務(wù)和正在執(zhí)行的任務(wù):Deque readyAsyncCalls, Deque runningAsyncCalls;

在每個(gè)任務(wù)結(jié)束時(shí),都會(huì)檢查 readyAsyncCalls 是否有任務(wù),在條件滿足的情況下,按照先進(jìn)先出的原則將任務(wù)移動(dòng)到 runningAsyncCalls中,并在線程池中執(zhí)行;

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

異步請求線程池

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

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

該線程池用來清理長時(shí)間閑置的和泄漏的連接;

該線程池本身無任務(wù)上限,線程閑置60s自動(dòng)回收;

雖然任務(wù)無上限,但其通過 cleanupRunning 標(biāo)記來控制只有一個(gè)線程在運(yùn)行,當(dāng)連接池中沒有連接后才會(huì)被重新設(shè)置為 false;

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

次工作線程會(huì)不斷地清理,當(dāng)清理完一遍后超時(shí)連接后,根據(jù)當(dāng)前連接池中最近的下一個(gè)空閑超時(shí)連接計(jì)算出一個(gè)阻塞時(shí)間并阻塞,直到連接池中沒有任何連接才結(jié)束,并將 cleanupRunning 設(shè)為 false;

在每次有連接加入連接池時(shí),如果當(dāng)前沒有清理任務(wù)運(yùn)行,會(huì)加入一個(gè)清理任務(wù)到到線程池中執(zhí)行;

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

連接池清理線程池

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

架構(gòu)分析高效HTTP客戶端OkHttp有什么優(yōu)勢

該線程池用于整理本地請求緩存數(shù)據(jù);

緩存的整理包含: 達(dá)到閥值大小的文件,刪除最近最少使用的記錄,在有關(guān)操作達(dá)到一定數(shù)量以后對記錄進(jìn)行重建;

最大運(yùn)行線程數(shù)1,無需考慮線程安全問題,自動(dòng)回收閑置60s的線程;

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

HTTP2采用了多路復(fù)用,因此需要維護(hù)連接有效性,本線程池就是用于維護(hù)相關(guān)的各類HTTP2事務(wù);

線程池本身無任務(wù)上限,自動(dòng)回收閑置60s的線程;

每一個(gè)HTTP2連接都有這么一個(gè)線程池存在;

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4897

    瀏覽量

    90310
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    538

    瀏覽量

    35569
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    各種PLC設(shè)備、智能儀表快速實(shí)現(xiàn)OPC UA服務(wù)(含客戶端測試過程)

    埃和智能網(wǎng)關(guān)支持各種PLC設(shè)備、智能儀表通過HTTP、MQTT協(xié)議JSON格式對接MES等系統(tǒng)平臺(tái),也可以對接MySQL等SQL數(shù)據(jù)庫,還可將設(shè)備數(shù)據(jù)轉(zhuǎn)為OPC UA服務(wù),支持多客戶端訪問。包含
    的頭像 發(fā)表于 04-30 13:48 ?98次閱讀
    各種PLC設(shè)備、智能儀表快速實(shí)現(xiàn)OPC UA服務(wù)<b class='flag-5'>端</b>(含<b class='flag-5'>客戶端</b>測試過程)

    Yearning+客戶端+手工EXPLAIN,NineData社區(qū)版能作為替代方案?

    Yearning 核心聚焦 SQL 審核與發(fā)布流程,慢 SQL 治理需搭配客戶端和手工分析,鏈路割裂。NineData 社區(qū)版以數(shù)據(jù)庫 DevOps 為底座,打通慢日志采集、模板聚合、診斷優(yōu)化
    的頭像 發(fā)表于 03-26 10:52 ?128次閱讀
    Yearning+<b class='flag-5'>客戶端</b>+手工EXPLAIN,NineData社區(qū)版能作為替代方案?

    EtherCAT FOE工作原理揭秘:客戶端-服務(wù)器模型如何運(yùn)轉(zhuǎn)?

    上期我們聊了EtherCATFOE的五大應(yīng)用場景,本期深入解析其底層工作機(jī)制。FOE究竟是如何實(shí)現(xiàn)文件傳輸?shù)??答案藏?b class='flag-5'>客戶端-服務(wù)器模型中。核心架構(gòu):一客戶端多服務(wù)器在EtherCAT網(wǎng)絡(luò)中,F(xiàn)OE
    的頭像 發(fā)表于 03-02 11:50 ?238次閱讀
    EtherCAT FOE工作原理揭秘:<b class='flag-5'>客戶端</b>-服務(wù)器模型如何運(yùn)轉(zhuǎn)?

    HTTP通信網(wǎng)關(guān)是什么?什么功能?

    的詳細(xì)說明: 核心功能 協(xié)議轉(zhuǎn)換(核心角色) 場景 :當(dāng)客戶端使用HTTP協(xié)議請求非HTTP服務(wù)(如FTP、數(shù)據(jù)庫查詢)時(shí),網(wǎng)關(guān)作為“翻譯器”將HTTP請求轉(zhuǎn)換為目標(biāo)協(xié)議(如FTP命令
    的頭像 發(fā)表于 12-23 11:14 ?652次閱讀

    agile_ftp傳輸文件時(shí)客戶端報(bào)錯(cuò)誤怎么解決?

    ]客戶端使用的filezilla [size=21.3333px] [size=21.3333px]現(xiàn)象: [size=21.3333px]filezilla客戶端可以正常上傳文件,但傳輸完畢時(shí)客戶端會(huì)報(bào)
    發(fā)表于 11-05 10:49

    libmodbus庫問題:TCP模式下客戶端超時(shí)斷開后無法再次重連怎么解決?

    情況1 :用libmodbus的TCP demo,發(fā)現(xiàn)用客戶端軟件連接收發(fā)如果超時(shí)后在啟動(dòng)連接就無法連接上libmodbus服務(wù)器了,聲明:客戶端此時(shí)不會(huì)主動(dòng)斷開連接。 情況2:客戶端用短連接
    發(fā)表于 10-14 08:17

    SOLIDWORKS PDM Professional安裝部署指南:從服務(wù)器到客戶端的詳細(xì)步驟

    一份詳盡的SOLIDWORKS PDM Professional安裝指南,面向IT管理員,涵蓋從SQL Server配置、服務(wù)器安裝到客戶端設(shè)置的全過程,確保您高效、正確地完成PDM系統(tǒng)部署
    的頭像 發(fā)表于 09-11 17:37 ?2030次閱讀

    Python modbus-tk如何獲得客戶端信息?

    Python modbus-tk如何獲得客戶端信息
    發(fā)表于 08-07 06:01

    請問IG502網(wǎng)關(guān)如何配置open vpn客戶端?

    網(wǎng)上找的教程配置open vpn,服務(wù)端正常,小圖標(biāo)已經(jīng)變綠。IG502網(wǎng)關(guān)做客戶端的話需要怎么配置?需要注意哪里?
    發(fā)表于 08-05 07:59

    是否可以將客戶端控件與CYW920706WCDEVAL一起使用?

    是否可以將客戶端控件與CYW920706WCDEVAL一起使用? 我想用它來發(fā)現(xiàn)藍(lán)牙 BR/EDR,然后將其與其他設(shè)備配對。 客戶端控制的下載鏈接或文檔嗎? 另外,你 AIROC
    發(fā)表于 07-04 07:50

    極簡教程:快速在樹莓派上運(yùn)行OpenVPN客戶端!

    這兩樣?xùn)|西后,你需要:1.準(zhǔn)備服務(wù)器2.配置客戶端3.測試連接準(zhǔn)備服務(wù)器:假設(shè)你已經(jīng)了OpenVPN服務(wù)器,你需要:提供客戶端配置為樹莓派設(shè)置靜態(tài)IP地址1.提
    的頭像 發(fā)表于 06-25 18:00 ?1668次閱讀
    極簡教程:快速在樹莓派上運(yùn)行OpenVPN<b class='flag-5'>客戶端</b>!

    Modbus TCP連接多個(gè)客戶端解決方法-深圳市振鑫通信科技

    ZP-MBS008多主站模塊是實(shí)現(xiàn)Modbus-TCP連接多個(gè)客戶端或者服務(wù)器通訊設(shè)備
    的頭像 發(fā)表于 06-25 11:07 ?2067次閱讀
    Modbus TCP連接多個(gè)<b class='flag-5'>客戶端</b>解決方法-深圳市振鑫通信科技

    請問Phy DLE Max TX Octets 由客戶端還是服務(wù)器控制?

    Phy DLE Max TX Octets 由客戶端還是服務(wù)器控制?
    發(fā)表于 06-25 08:28

    客戶端解決方案:樹莓派電腦助力企業(yè)實(shí)現(xiàn)碳中和目標(biāo)!

    Losingthewires通過幫助企業(yè)轉(zhuǎn)向RaspberryPi管理的瘦客戶端,減少對臺(tái)式電腦的依賴,使商業(yè)世界更加可持續(xù),并助力企業(yè)實(shí)現(xiàn)碳中和目標(biāo)
    的頭像 發(fā)表于 06-22 20:33 ?802次閱讀
    瘦<b class='flag-5'>客戶端</b>解決方案:樹莓派電腦助力企業(yè)實(shí)現(xiàn)碳中和目標(biāo)!

    不用聯(lián)網(wǎng)不用編程,PLC通過智能網(wǎng)關(guān)快速實(shí)現(xiàn)HTTP協(xié)議JSON格式與MES等系統(tǒng)平臺(tái)雙向數(shù)據(jù)通訊

    智能網(wǎng)關(guān)IGT-DSER支持POST/GET/PUT等多種方法,可同時(shí)作為HTTP協(xié)議的客戶端和服務(wù)。作為客戶端通訊時(shí)將JSON文件提交給HTTP
    的頭像 發(fā)表于 05-13 14:40 ?1436次閱讀
    不用聯(lián)網(wǎng)不用編程,PLC通過智能網(wǎng)關(guān)快速實(shí)現(xiàn)<b class='flag-5'>HTTP</b>協(xié)議JSON格式與MES等系統(tǒng)平臺(tái)雙向數(shù)據(jù)通訊
    澄城县| 绥化市| 从化市| 奎屯市| 合作市| 汕尾市| 科技| 青川县| 阳原县| 岱山县| 科技| 曲松县| 宣威市| 彭州市| 靖江市| 广汉市| 台湾省| 哈巴河县| 比如县| 惠来县| 莲花县| 察隅县| 尼玛县| 太保市| 砀山县| 凌源市| 高邮市| 运城市| 武平县| 色达县| 杭锦旗| 聂拉木县| 敖汉旗| 阿图什市| 玛曲县| 长阳| 西平县| 巴里| 栖霞市| 嵊州市| 杂多县|