女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

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

汽車玩家 ? 來(lái)源:IT知識(shí)課堂 ? 作者:IT知識(shí)課堂 ? 2020-05-05 23:13 ? 次閱讀

精髓

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

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

Okhttp請(qǐng)求流程

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

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

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

OkHttp中用戶可傳入的interceptor分為兩類,一類是全局interceptor,該類interceptor在請(qǐng)求開始之前最早被調(diào)用,另外一類為非網(wǎng)頁(yè)請(qǐng)求的networkInterceptor,這類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客戶端OkHttp有什么優(yōu)勢(shì)

完整interceptor-chain

OkHttp3中的線程池

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

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

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

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

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

雖然線程池?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客戶端OkHttp有什么優(yōu)勢(shì)

通過(guò)兩個(gè)雙端隊(duì)列來(lái)維護(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)勢(shì)

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

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

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

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

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

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

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

次工作線程會(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ù)到到線程池中執(zhí)行;

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

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

連接池清理線程池

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    13

    文章

    4505

    瀏覽量

    87071
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    521

    瀏覽量

    32461
收藏 人收藏

    評(píng)論

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

    不用聯(lián)網(wǎng)不用編程,PLC通過(guò)智能網(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 ?191次閱讀
    不用聯(lián)網(wǎng)不用編程,PLC通過(guò)智能網(wǎng)關(guān)快速實(shí)現(xiàn)<b class='flag-5'>HTTP</b>協(xié)議JSON格式與MES等系統(tǒng)平臺(tái)雙向數(shù)據(jù)通訊

    MKW45B41Z客戶端無(wú)法從服務(wù)器獲取服務(wù)是為什么?

    。MKW45B41Z (自定義板) 充當(dāng)中央設(shè)備客戶端角色。MKW45 客戶端掃描外圍設(shè)備(NRF 連接)設(shè)備并連接到外圍設(shè)備(NRF 連接)設(shè)備。連接 MKW45(自定義板卡)后,客戶端無(wú)法從服務(wù)器
    發(fā)表于 03-28 07:40

    如何構(gòu)建MCP客戶端

    Anthropic開源了一套MCP協(xié)議,它為連接AI系統(tǒng)與數(shù)據(jù)源提供了一個(gè)通用的、開放的標(biāo)準(zhǔn),用單一協(xié)議取代了碎片化的集成方式。本文教你從零打造一個(gè)MCP客戶端
    的頭像 發(fā)表于 03-20 09:32 ?1221次閱讀
    如何構(gòu)建MCP<b class='flag-5'>客戶端</b>

    HTTP 協(xié)議的工作原理

    HTTP協(xié)議的工作原理 1. HTTP協(xié)議概述 HTTP是一個(gè)應(yīng)用層協(xié)議,它定義了客戶端與服務(wù)器之間請(qǐng)求和響應(yīng)的格式。HTTP協(xié)議基于TCP
    的頭像 發(fā)表于 12-30 09:21 ?864次閱讀

    邁威通信工業(yè)無(wú)線客戶端:智能制造的高效連接新解法

    隨著智能制造的興起,企業(yè)越來(lái)越依賴自動(dòng)化和數(shù)字化技術(shù)來(lái)提高生產(chǎn)效率和靈活性。工業(yè)無(wú)線客戶端作為連接各個(gè)設(shè)備和系統(tǒng)的橋梁,其重要性日益凸顯。通過(guò)工業(yè)無(wú)線客戶端,可以實(shí)現(xiàn)設(shè)備間的實(shí)時(shí)數(shù)據(jù)交換和遠(yuǎn)程監(jiān)控,從而進(jìn)一步提升生產(chǎn)過(guò)程的智能化水平。
    的頭像 發(fā)表于 11-22 16:10 ?424次閱讀
    邁威通信工業(yè)無(wú)線<b class='flag-5'>客戶端</b>:智能制造的<b class='flag-5'>高效</b>連接新解法

    NTP網(wǎng)絡(luò)時(shí)間服務(wù)器能帶同步多少客戶端

    NTP網(wǎng)絡(luò)時(shí)間服務(wù)器能帶同步多少客戶端
    的頭像 發(fā)表于 09-04 10:43 ?777次閱讀
    NTP網(wǎng)絡(luò)時(shí)間服務(wù)器能帶同步多少<b class='flag-5'>客戶端</b>?

    Rambus推出DDR5客戶端時(shí)鐘驅(qū)動(dòng)器

    在追求極致性能與效率的科技浪潮中,Rambus再次引領(lǐng)行業(yè)前行,正式宣布推出面向下一代高性能臺(tái)式電腦與筆記本電腦的DDR5客戶端時(shí)鐘驅(qū)動(dòng)器(CKD)。這一創(chuàng)新舉措標(biāo)志著Rambus將其在服務(wù)器領(lǐng)域的先進(jìn)內(nèi)存接口技術(shù)成功擴(kuò)展至廣闊的客戶端市場(chǎng),為PC用戶帶來(lái)前所未有的性能飛
    的頭像 發(fā)表于 09-03 15:26 ?813次閱讀

    使用NS1串口服務(wù)器HTTP模式上傳服務(wù)器數(shù)據(jù)

    HTTP協(xié)議工作于客戶端-服務(wù)架構(gòu)之上。瀏覽器作為HTTP客戶端通過(guò)URL向
    的頭像 發(fā)表于 08-30 12:36 ?850次閱讀
    使用NS1串口服務(wù)器<b class='flag-5'>HTTP</b>模式上傳服務(wù)器數(shù)據(jù)

    使用ESP8266板和AT命令集構(gòu)建一個(gè)多客戶端HTTP服務(wù)器遇到的疑問(wèn)求解

    我們正在嘗試使用ESP8266板和 AT 命令集構(gòu)建一個(gè)多客戶端 HTTP 服務(wù)器,通過(guò)串行端口連接到 Arduino 板。我們正在使用 Arduino Mega 2560 板。它有更多的串行端口
    發(fā)表于 07-18 08:03

    esp_iot_sdk_v0.9.6_b1客戶端斷開連接導(dǎo)致WDT重置怎么解決?

    客戶端斷開連接,服務(wù)器一定不會(huì)掛起。實(shí)際上,由于客戶端啟動(dòng)了連接,因此客戶端理所當(dāng)然地應(yīng)該能夠斷開連接,而不會(huì)對(duì)服務(wù)器造成任何問(wèn)題。 IPD,0,80:GET /測(cè)試 HTTP/1.
    發(fā)表于 07-18 06:33

    如果ESP上的TCP客戶端與服務(wù)器斷開連接,如何啟用自動(dòng)重連?

    ESP - TCP 客戶端 嵌入式 Linux 服務(wù)器 - TCP 服務(wù)器 如果ESP上的TCP客戶端與服務(wù)器斷開連接,如何啟用自動(dòng)重連?
    發(fā)表于 07-17 06:25

    如何獲取連接的TCP客戶端的ESPCONN指針?

    我?guī)缀蹰喿x了 SDK API 指南版本 1.0.1 的所有文檔 并開始了解如何添加用戶 AT 命令。 這真的很簡(jiǎn)單,只需撥打at_cmd_array_register。 BUT! 如何獲取連接的 TCP 客戶端的 ESPCONN 指針?
    發(fā)表于 07-12 14:54

    如何同時(shí)在ESP8266上運(yùn)行TCP客戶端和TCP服務(wù)?

    客戶端無(wú)法連接到 TCP 服務(wù)器。如果不將 TCP 客戶端從 ESP 連接到云服務(wù)器,則 ESP 上的 TCP 服務(wù)器可以很好地接受 TCP 客戶端連接。 TCP 客戶端 UDP
    發(fā)表于 07-08 08:26

    求助,關(guān)于ESP32C3 TCP客戶端連接斷線問(wèn)題求解

    ESP32C3開啟AP模式做TCP服務(wù)器,手機(jī)做客戶端連接服務(wù)器;超過(guò)默認(rèn)最大連接數(shù)(5)以后,即使部分客戶端斷開了,也無(wú)法再發(fā)起連接連接不上。一定需要服務(wù)器給客戶端發(fā)送數(shù)據(jù),確認(rèn)
    發(fā)表于 06-27 07:54

    請(qǐng)問(wèn)esp32能支持多個(gè)客戶端同時(shí)連接嗎?

    根據(jù)我現(xiàn)在的測(cè)試結(jié)果,esp32作為ble server時(shí)同時(shí)支持一個(gè)客戶端連接,前一個(gè)客戶端必須斷開藍(lán)牙連接,后一個(gè)才能連接。實(shí)際esp32能支持多個(gè)客戶端同時(shí)連接嗎?有沒(méi)有相關(guān)例程?
    發(fā)表于 06-11 06:25