在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

架構分析高效HTTP客戶端OkHttp有什么優勢

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

掃碼添加小助手

加入工程師交流群

精髓

在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 readyAsyncCalls, Deque 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連接都有這么一個線程池存在;

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4528

    瀏覽量

    87362
  • HTTP
    +關注

    關注

    0

    文章

    525

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    不用聯網不用編程,PLC通過智能網關快速實現HTTP協議JSON格式與MES等系統平臺雙向數據通訊

    智能網關IGT-DSER支持POST/GET/PUT等多種方法,可同時作為HTTP協議的客戶端和服務。作為客戶端通訊時將JSON文件提交給HTTP
    的頭像 發表于 05-13 14:40 ?307次閱讀
    不用聯網不用編程,PLC通過智能網關快速實現<b class='flag-5'>HTTP</b>協議JSON格式與MES等系統平臺雙向數據通訊

    MKW45B41Z客戶端無法從服務器獲取服務是為什么?

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

    如何構建MCP客戶端

    Anthropic開源了一套MCP協議,它為連接AI系統與數據源提供了一個通用的、開放的標準,用單一協議取代了碎片化的集成方式。本文教你從零打造一個MCP客戶端
    的頭像 發表于 03-20 09:32 ?1413次閱讀
    如何構建MCP<b class='flag-5'>客戶端</b>

    HTTP 1.1 和 HTTP 2.0 的區別

    HTTP(超文本傳輸協議)是互聯網上應用最為廣泛的協議之一,用于在客戶端和服務器之間傳輸數據。隨著技術的發展,HTTP協議也在不斷地更新和優化。HTTP/1.1是1999年發布的,而
    的頭像 發表于 12-30 09:25 ?1085次閱讀

    HTTP 協議的工作原理

    HTTP協議的工作原理 1. HTTP協議概述 HTTP是一個應用層協議,它定義了客戶端與服務器之間請求和響應的格式。HTTP協議基于TCP
    的頭像 發表于 12-30 09:21 ?989次閱讀

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

    隨著智能制造的興起,企業越來越依賴自動化和數字化技術來提高生產效率和靈活性。工業無線客戶端作為連接各個設備和系統的橋梁,其重要性日益凸顯。通過工業無線客戶端,可以實現設備間的實時數據交換和遠程監控,從而進一步提升生產過程的智能化水平。
    的頭像 發表于 11-22 16:10 ?484次閱讀
    邁威通信工業無線<b class='flag-5'>客戶端</b>:智能制造的<b class='flag-5'>高效</b>連接新解法

    NTP網絡時間服務器能帶同步多少客戶端

    NTP網絡時間服務器能帶同步多少客戶端
    的頭像 發表于 09-04 10:43 ?870次閱讀
    NTP網絡時間服務器能帶同步多少<b class='flag-5'>客戶端</b>?

    Rambus推出DDR5客戶端時鐘驅動器

    在追求極致性能與效率的科技浪潮中,Rambus再次引領行業前行,正式宣布推出面向下一代高性能臺式電腦與筆記本電腦的DDR5客戶端時鐘驅動器(CKD)。這一創新舉措標志著Rambus將其在服務器領域的先進內存接口技術成功擴展至廣闊的客戶端市場,為PC用戶帶來前所未有的性能飛
    的頭像 發表于 09-03 15:26 ?885次閱讀

    使用NS1串口服務器HTTP模式上傳服務器數據

    HTTP協議工作于客戶端-服務架構之上。瀏覽器作為HTTP客戶端通過URL向
    的頭像 發表于 08-30 12:36 ?969次閱讀
    使用NS1串口服務器<b class='flag-5'>HTTP</b>模式上傳服務器數據

    使用ESP8266板和AT命令集構建一個多客戶端HTTP服務器遇到的疑問求解

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

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

    客戶端斷開連接,服務器一定不會掛起。實際上,由于客戶端啟動了連接,因此客戶端理所當然地應該能夠斷開連接,而不會對服務器造成任何問題。 IPD,0,80:GET /測試 HTTP/1.
    發表于 07-18 06:33

    如果ESP上的TCP客戶端與服務器斷開連接,如何啟用自動重連?

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

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

    我幾乎閱讀了 SDK API 指南版本 1.0.1 的所有文檔 并開始了解如何添加用戶 AT 命令。 這真的很簡單,只需撥打at_cmd_array_register。 BUT! 如何獲取連接的 TCP 客戶端的 ESPCONN 指針?
    發表于 07-12 14:54
    主站蜘蛛池模板: 国产主播在线播放 | 国内精品久久久久影院男同志 | 精品免费久久久久久成人影院 | 免费三级毛片 | 免费观看黄视频网站 | 天堂中文www在线 | 加勒比精品视频 | 777奇米影视一区二区三区 | 婷婷综合久久中文字幕 | 久久精品亚洲热综合一本奇米 | 成年大片免费播放视频人 | 性殴美高清视频 | 俺也射| 欧美xxxx色视频在线观看 | 国产高清一区二区三区四区 | 欧美人与z0zoxxxx | 国产成人悠悠影院 | 国产毛片久久国产 | 国内精品91久久久久 | 亚洲情a成黄在线观看 | 奇米影视一区 | 最好免费高清视频观看韩国 | 特黄级 | 井野雏田小樱天天被调教 | 亚洲播播 | 性欧美高清极品猛交 | 黑人又大又粗又长又深受不了 | 可以在线看黄的网站 | 国产精品国产三级国产普通话对白 | 老司机亚洲精品影院在线观看 | 国产精品人成在线播放新网站 | 色视频在线观看免费 | 国产精品怡红院永久免费 | 国产精品久久久久久久免费大片 | 午夜官网| 在线免费日韩 | 午夜大片在线观看 | 精品一区二区国语对白 | 日韩 ed2k| 一级a毛片免费 | 日日操免费视频 |