在线观看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

    文章

    4357

    瀏覽量

    86186
  • HTTP
    +關注

    關注

    0

    文章

    511

    瀏覽量

    31526
收藏 人收藏

    評論

    相關推薦

    HTTP 協議的工作原理

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

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

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

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

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

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

    HTTP協議工作于客戶端-服務架構之上。瀏覽器作為HTTP客戶端通過URL向
    的頭像 發表于 08-30 12:36 ?481次閱讀
    使用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

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

    我幾乎閱讀了 SDK API 指南版本 1.0.1 的所有文檔 并開始了解如何添加用戶 AT 命令。 這真的很簡單,只需撥打at_cmd_array_register。 BUT! 如何獲取連接的 TCP 客戶端的 ESPCONN 指針?
    發表于 07-12 14:54

    如何同時在ESP8266上運行TCP客戶端和TCP服務?

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

    求助,關于ESP32C3 TCP客戶端連接斷線問題求解

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

    請問esp32能支持多個客戶端同時連接嗎?

    根據我現在的測試結果,esp32作為ble server時同時支持一個客戶端連接,前一個客戶端必須斷開藍牙連接,后一個才能連接。實際esp32能支持多個客戶端同時連接嗎?有沒有相關例程?
    發表于 06-11 06:25

    服務測試和客戶端測試區別在哪

    服務測試和客戶端測試是軟件開發過程中的兩個重要環節,它們分別針對服務器客戶端的軟件進行測試。本文將詳細介紹服務測試和
    的頭像 發表于 05-30 15:27 ?3425次閱讀

    使用FreeRTOS+LwIP開發版做客戶端斷開后不能夠重新連接?

    請教下, 使用FreeRTOS+LwIP 開發版做客戶端斷開后不能夠重新連接 ? 具體描述如下: 1、開發版作為客戶端使用 2、初次上電能夠正常通訊,也就是 開發板可以發送數據到服務器
    發表于 04-30 07:48

    stm32 +lwip1.3.1客戶端異常導致網絡ping不通怎么解決?

    stm32上運行lwip作為服務器,如果客戶端異常了,發現在客戶端再也ping不通 網絡如果異常,交換機掛了,重啟后,客戶端怎么都ping不通stm32 有沒有遇到同樣的問題? 不是tcp的pcb被占用,ping都不能通,lw
    發表于 04-22 07:30

    HarmonyOS開發實例:【分布式新聞客戶端

    基于柵格布局、設備管理和多端協同,實現一次開發,多端部署的分布式新聞客戶端頁面。
    的頭像 發表于 04-17 15:57 ?934次閱讀
    HarmonyOS開發實例:【分布式新聞<b class='flag-5'>客戶端</b>】

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

    是否可以將客戶端控件與CYW920706WCDEVAL一起使用? 我想用它來發現藍牙 BR/EDR,然后將其與其他設備配對。 客戶端控制的下載鏈接或文檔嗎? 另外,你 AIROC
    發表于 03-01 15:54
    主站蜘蛛池模板: 狠狠色狠狠色综合日日小蛇 | 一本到卡二卡三卡福利 | 日韩美女奶水喂男人在线观看 | 日本午夜视频 | 国产小视频在线观看免费 | 一级特色黄色片 | 日本色免费 | 欧美视频免费一区二区三区 | 欧美午夜精品久久久久久黑人 | 国产精品夜夜春夜夜 | 色欧美视频 | 国产资源在线视频 | 一级女人毛片人一女人 | 国产hs免费高清在线观看 | 日本jlzz | 色综合天天综一个色天天综合网 | 中文字幕在线不卡 | 美女扒开内裤无遮挡禁18 | 日本网站免费 | 狠狠五月深爱婷婷网 | 欧美日韩伦理 | 久久婷婷综合中文字幕 | 国产美女精品视频免费观看 | 在线视频免费播放 | 五月亭亭六月丁香 | 亚洲大色| 亚洲小younv另类 | 婷婷四房播客五月天 | 伊人一区二区三区 | 亚洲国产精品久久婷婷 | 狠狠插狠狠插 | 在线网址你懂的 | 亚洲成人毛片 | 人人爽人人澡 | 成年片色大黄全免费网址 | 亚洲加勒比在线 | 天天碰视频| 宅男69免费永久网站 | 国产美女精品久久久久久久免费 | 天天草狠狠干 | 五月天婷婷在线观看 |