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

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

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

鴻蒙開發(fā)實戰(zhàn):【ylong_http】解析

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-12 16:57 ? 次閱讀

簡介

ylong_http 構(gòu)建了完整的 HTTP 能力,支持用戶使用 HTTP 能力完成通信場景的需求。

ylong_http 使用 Rust 編寫,為 OpenHarmony 的 Rust 能力構(gòu)筑提供支持。

ylong_http 在 OpenHarmony 中的位置

ylong_http 向 OpenHarmony 系統(tǒng)服務(wù)層中的網(wǎng)絡(luò)協(xié)議棧模塊提供 HTTP 協(xié)議支持,經(jīng)由網(wǎng)絡(luò)協(xié)議棧模塊幫助上層應(yīng)用建立 HTTP 通信能力。

structure

以下是對于上圖關(guān)鍵字段的描述信息

  • APP:需要使用上傳下載能力的直接面向用戶的上層應(yīng)用。
  • request:提供上傳下載能力的系統(tǒng)組件。
  • netstack:提供網(wǎng)絡(luò)協(xié)議棧功能的系統(tǒng)組件。
  • ylong_http:提供 HTTP 能力的系統(tǒng)組件。
    • ylong_http_clientylong_http 下的模塊之一,提供 HTTP 客戶端能力。
    • ylong_http:ylong_http 下的模塊之一,提供 HTTP 的基礎(chǔ)能力。
  • ylong_runtimeylong 提供的 Rust 異步運行時庫。
  • tokio:業(yè)界常用的第三方 Rust 異步運行時庫。
  • OpenSSL:業(yè)界常用的第三方 TLS 實現(xiàn)庫。

ylong_http 的內(nèi)部架構(gòu):

inner_structure

ylong_http 內(nèi)部當前分為兩個主要模塊:ylong_http_client 客戶端模塊和 ylong_http 協(xié)議組件模塊。

ylong_http_client 模塊負責提供 HTTP 客戶端功能,能夠支持用戶發(fā)送 HTTP 請求,并接收 HTTP 響應(yīng),內(nèi)部又分為三個主要部分:

  • sync_impl:同步的 HTTP 客戶端實現(xiàn),該客戶端實現(xiàn)不依賴于任何運行時,可以直接在線程模型上運行,但是整體使用同步阻塞策略。
  • async_impl:異步的 HTTP 客戶端實現(xiàn),該客戶端實現(xiàn)需要使用 Rust 的異步運行時組件。異步 HTTP 客戶端利用 Rust 的異步能力,具有優(yōu)異的性能表現(xiàn)。
  • Util:同步和異步的 HTTP 客戶端部分實現(xiàn)共通,例如自動重定向、HTTP 代理等。

sync_implasync_impl 接口原型基本一致(主要是 Rust 異步語法與同步語法的差異),所以用戶可以在較小的代碼改動量下完成同步和異步邏輯的切換。

sync_implasync_impl 的整體架構(gòu)相同,分為如下模塊:

  • Client:對外提供 HTTP 客戶端的基本接口,例如配置客戶端的相關(guān)選項,發(fā)送 HTTP 請求等。
  • ConnectionPool:主要負責大量連接管理,管理所有 Dispatcher 的生命周期,包括啟動、運行、停止。HTTP 協(xié)議是基于連接的通信協(xié)議,涉及連接復(fù)用、連接管理等功能。
  • Dispatcher:主要負責單一連接管理,管理單個連接的啟動、運行、停止、傳輸。每個連接都被一個 Dispatcher 管轄,由 Dispatcher 決定當前待發(fā)送的請求是不是使用它管理的連接。
  • Connections:連接對象,可以是 TCP 連接、TLS 連接或者是更加泛化的連接對象,在該連接上進行消息傳輸和接收,是 Client 和 HTTP 協(xié)議的底座。
  • Connector:負責創(chuàng)建連接對象。Connector 也是一個 trait,用戶可以使用它來定義創(chuàng)建連接時的行為。

Util 中包含了同步和異步的 HTTP 客戶端共通的能力,例如:

  • Redirect:HTTP 自動重定向能力。當 HTTP 響應(yīng)返回重定向相關(guān)的狀態(tài)碼時,HTTP 客戶端會進行自動重定向,并自動發(fā)送新的請求到下一跳。
  • Proxy:HTTP 代理能力。發(fā)送 HTTP 請求時,向代理發(fā)送而非直接發(fā)送給原始服務(wù)器,然后由代理服務(wù)器返回原始服務(wù)器的響應(yīng)。
  • Pool:通用連接池實現(xiàn),支持多個同步或異步連接的管理,便于上層同步或異步客戶端復(fù)用已有連接,減少連接重復(fù)創(chuàng)建次數(shù),提高性能。
  • OpenSSL_adapter:HTTPS 需要在 HTTP 的基礎(chǔ)上使用 TLS 能力,在 OpenHarmony 上使用的是 OpenSSL,所以需要對 OpenSSL 的接口進行 Rust 封裝。

ylong_http 模塊負責提供 HTTP 的基礎(chǔ)能力,例如 HTTP2 的 HPACK、HTTP3 的 QPACK 等,主要包含以下關(guān)鍵模塊:

  • Request:HTTP 請求基礎(chǔ)能力,根據(jù) RFC9110 規(guī)定實現(xiàn)了 HTTP 請求的所有內(nèi)容和行為。HTTP 請求主要用于向指定服務(wù)器發(fā)送請求。
  • Response:HTTP 響應(yīng)基礎(chǔ)能力,根據(jù) RFC9110 規(guī)定實現(xiàn)了 HTTP 響應(yīng)的所有內(nèi)容和行為。HTTP 響應(yīng)主要是服務(wù)器針對客戶端請求的回應(yīng)。
  • Body: HTTP 消息體能力,根據(jù) RFC9110 規(guī)定實現(xiàn)了 HTTP 消息體的所有內(nèi)容和行為。HTTP 消息體保存主要數(shù)據(jù)內(nèi)容,以便客戶端和服務(wù)器通信。 HTTP 消息體在協(xié)議中有多種形式,在 ylong_http 庫中有對應(yīng)實現(xiàn),例如 EmptyBody 對應(yīng)于空消息體,TextBody 對應(yīng)于明文消息體,ChunkBody 對應(yīng)于分塊消息體,Mime 對應(yīng)于 Multipart 消息體。
  • H1:HTTP1 的所有基礎(chǔ)能力,例如 HTTP1 格式的請求和響應(yīng)的編碼器和解碼器等。
  • H2:HTTP2 的所有基礎(chǔ)能力,例如 HTTP2 格式的請求和響應(yīng)的編碼器和解碼器、HTTP2 幀編碼器和解碼器、HPACK等。
  • H3:HTTP3 的所有基礎(chǔ)能力,例如 HTTP3 格式的請求和響應(yīng)的編碼器和解碼器、QPACK 等。

編譯構(gòu)建

若使用 GN 編譯工具鏈, 在 BUILD.gndeps 段下添加依賴。添加后使用 GN 進行編譯和構(gòu)建:

deps += ["http://example_path/ylong_http_client:ylong_http_client"]

若使用 Cargo 編譯工具鏈, 在 Cargo.toml 下添加依賴。添加后使用 cargo 進行編譯和構(gòu)建:

[dependencies]
ylong_http_client = { path = "/example_path/ylong_http_client" } # 請使用路徑依賴

目錄

ylong_http
├── docs                        # ylong_http 用戶指南
├── figures                     # ylong_http 圖片資源
├── patches                     # ylong_http 門禁使用的補丁資源
├── ylong_http
│   ├── examples                # ylong_http 基礎(chǔ)組件庫代碼示例
│   ├── src                     # ylong_http 基礎(chǔ)組件庫源碼
│   │   ├── body                # Body trait 定義和擴展 Body 類型
│   │   ├── h1                  # HTTP/1.1 相關(guān)組件實現(xiàn)
│   │   ├── h2                  # HTTP/2 相關(guān)組件實現(xiàn)
│   │   ├── h3                  # HTTP/3 相關(guān)組件實現(xiàn)
│   │   ├── huffman             # Huffman 編解碼實現(xiàn)
│   │   ├── request             # Request 定義和實現(xiàn)
│   │   └── response            # Response 定義和實現(xiàn)
│   └── tests                   # ylong_http 基礎(chǔ)組件庫測試目錄
│
└── ylong_http_client
    ├── examples                # ylong_http_client 庫代碼示例
    ├── src                     # ylong_http_client 庫源碼
    │   ├── async_impl          # ylong_http_client 異步客戶端實現(xiàn)
    │   │   ├── conn            # 異步連接層
    │   │   ├── downloader      # 異步下載器實現(xiàn)
    │   │   ├── ssl_stream      # 異步 tls 適配層
    │   │   └── uploader        # 異步上傳器實現(xiàn)   
    │   ├── sync_impl           # ylong_http_client 同步客戶端實現(xiàn)
    │   │   └── conn            # 同步連接層
    │   └── util                # ylong_http_client 組件實現(xiàn)
    │       ├── c_openssl       # OpenSSL 封裝層
    │       │   ├── ffi         # ffi 封裝層
    │       │   └── ssl         # ssl 適配層
    │       └── config          # 配置選項實現(xiàn)
    │           └── tls         # TLS 選項實現(xiàn)
    │               └── alpn    # ALPN 實現(xiàn)
    └── tests                   # ylong_http_client 庫測試目錄

審核編輯:劉清

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

    關(guān)注

    183

    文章

    2632

    瀏覽量

    66048
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1956

    瀏覽量

    29907
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3611

    瀏覽量

    15963
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    4346
收藏 人收藏

    評論

    相關(guān)推薦

    鴻蒙網(wǎng)絡(luò)開發(fā)學習:【ylong_http

    ylong_http 構(gòu)建了完整的 HTTP 能力,支持用戶使用 HTTP 能力完成通信場景的需求。 ylong_http 使用 Rust 編寫,為 OpenHarmony 的
    的頭像 發(fā)表于 03-25 16:36 ?665次閱讀
    <b class='flag-5'>鴻蒙</b>網(wǎng)絡(luò)<b class='flag-5'>開發(fā)</b>學習:【<b class='flag-5'>ylong_http</b>】

    鴻蒙實戰(zhàn)項目開發(fā):【短信服務(wù)】

    、OpenHarmony 多媒體技術(shù)、Napi組件、OpenHarmony內(nèi)核、Harmony南向開發(fā)、鴻蒙項目實戰(zhàn)等等)鴻蒙(Harmony NEXT) 技術(shù)知識點 如果你是一名An
    發(fā)表于 03-03 21:29

    鴻蒙原生應(yīng)用開發(fā)-網(wǎng)絡(luò)管理HTTP數(shù)據(jù)請求

    http模塊提供。 使用該功能需要申請ohos.permission.INTERNET權(quán)限。 涉及的接口如下表,具體的接口說明請參考API文檔。 三、request接口開發(fā)步驟 1.從
    發(fā)表于 03-29 17:51

    鴻蒙Flutter實戰(zhàn):07混合開發(fā)

    # 鴻蒙Flutter實戰(zhàn):混合開發(fā) 鴻蒙Flutter混合開發(fā)主要有兩種形式。 ## 1.基于har 將flutter module
    發(fā)表于 10-23 16:00

    鴻蒙Flutter實戰(zhàn):08-如何調(diào)試代碼

    # 鴻蒙Flutter實戰(zhàn):如何調(diào)試代碼 ## 1.環(huán)境搭建 參考文章[鴻蒙Flutter實戰(zhàn):01-搭建開發(fā)環(huán)境](https://g
    發(fā)表于 10-23 16:29

    【專家問答】楊光明:鴻蒙系統(tǒng)研發(fā)工程師教你從0開發(fā)鴻蒙PCB開發(fā)

    `前言:本期我們邀請到了張飛實戰(zhàn)電子團隊的鴻蒙系統(tǒng)研發(fā)工程師楊光明老師@aMi楊光明,本期高手問答中老師將為我們解答大家在Linux系統(tǒng)開發(fā),單片機開發(fā),以及在進行
    發(fā)表于 09-25 15:24

    課程推薦【1】 | 鴻蒙設(shè)備開發(fā)入門

    ,Android。出版書籍《物聯(lián)網(wǎng)——嵌入式開發(fā)實戰(zhàn)》你將會學到:本課程將帶大家入門HarmonyOS設(shè)備開發(fā),以Hi3861鴻蒙開發(fā)板為例
    發(fā)表于 12-28 16:26

    LabVIEW入門與實戰(zhàn)開發(fā)100例

    LabVIEW入門與實戰(zhàn)開發(fā)100例LabVIEW入門與實戰(zhàn)開發(fā)100例LabVIEW入門與實戰(zhàn)開發(fā)
    發(fā)表于 02-18 11:44 ?0次下載

    HarmonyOS測試技術(shù)與實戰(zhàn)-HarmonyOS圖形棧測試技術(shù)深度解析

    HDC 2021華為開發(fā)者大會HarmonyOS測試技術(shù)與實戰(zhàn)-HarmonyOS圖形棧測試技術(shù)深度解析
    的頭像 發(fā)表于 10-23 15:09 ?1467次閱讀
    HarmonyOS測試技術(shù)與<b class='flag-5'>實戰(zhàn)</b>-HarmonyOS圖形棧測試技術(shù)深度<b class='flag-5'>解析</b>

    華為開發(fā)者大會分論壇HarmonyOS測試技術(shù)與實戰(zhàn)-鴻蒙智聯(lián)認證生態(tài)設(shè)備測試挑戰(zhàn)

    HDC 2021華為開發(fā)者大會分論壇HarmonyOS測試技術(shù)與實戰(zhàn)-鴻蒙智聯(lián)認證生態(tài)設(shè)備測試挑戰(zhàn)
    的頭像 發(fā)表于 10-23 16:40 ?1749次閱讀
    華為<b class='flag-5'>開發(fā)</b>者大會分論壇HarmonyOS測試技術(shù)與<b class='flag-5'>實戰(zhàn)</b>-<b class='flag-5'>鴻蒙</b>智聯(lián)認證生態(tài)設(shè)備測試挑戰(zhàn)

    arduino開發(fā)實戰(zhàn)指南

    arduino開發(fā)實戰(zhàn)指南
    發(fā)表于 02-22 14:56 ?0次下載

    Python項目開發(fā)實戰(zhàn)

    Python項目開發(fā)實戰(zhàn)
    發(fā)表于 06-13 14:51 ?2次下載

    鴻蒙開發(fā)實戰(zhàn):【Hdf Framework】

    該倉主要存放OpenHarmony驅(qū)動子系統(tǒng)核心源碼信息(包括驅(qū)動框架、配置管理、配置解析、驅(qū)動通用框架模型、硬件通用平臺能力接口等),旨在為開發(fā)者提供更精準、更高效的開發(fā)環(huán)境,力求做到一次
    的頭像 發(fā)表于 03-21 20:29 ?374次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b>:【Hdf Framework】

    鴻蒙OS開發(fā)實戰(zhàn):【網(wǎng)絡(luò)管理HTTP數(shù)據(jù)請求】

    應(yīng)用通過HTTP發(fā)起一個數(shù)據(jù)請求,支持常見的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。
    的頭像 發(fā)表于 04-01 16:31 ?600次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b>:【網(wǎng)絡(luò)管理<b class='flag-5'>HTTP</b>數(shù)據(jù)請求】

    鴻蒙OS開發(fā)實例:【HarmonyHttpClient】網(wǎng)絡(luò)框架

    鴻蒙上使用的Http網(wǎng)絡(luò)框架,里面包含純Java實現(xiàn)的HttpNet,類似okhttp使用,支持同步和異步兩種請求方式;還有鴻蒙版retrofit,和Android版Retrofit相似的使用,解放雙手般優(yōu)雅使用注解、自動
    的頭像 發(fā)表于 04-12 16:58 ?759次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b>實例:【HarmonyHttpClient】網(wǎng)絡(luò)框架