0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙开发实战:【ylong_http】解析

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-03-12 16:57 次阅读

简介

ylong_http 构建了完整的 HTTP 能力,支持用户使用 HTTP 能力完成通信场景的需求。

ylong_http 使用 Rust 编写,为 OpenHarmony 的 Rust 能力构筑提供支持。

ylong_http 在 OpenHarmony 中的位置

ylong_http 向 OpenHarmony 系统服务层中的网络协议栈模块提供 HTTP 协议支持,经由网络协议栈模块帮助上层应用建立 HTTP 通信能力。

structure

以下是对于上图关键字段的描述信息

  • APP:需要使用上传下载能力的直接面向用户的上层应用。
  • request:提供上传下载能力的系统组件。
  • netstack:提供网络协议栈功能的系统组件。
  • ylong_http:提供 HTTP 能力的系统组件。
    • ylong_http_clientylong_http 下的模块之一,提供 HTTP 客户端能力。
    • ylong_http:ylong_http 下的模块之一,提供 HTTP 的基础能力。
  • ylong_runtimeylong 提供的 Rust 异步运行时库。
  • tokio:业界常用的第三方 Rust 异步运行时库。
  • OpenSSL:业界常用的第三方 TLS 实现库。

ylong_http 的内部架构:

inner_structure

ylong_http 内部当前分为两个主要模块:ylong_http_client 客户端模块和 ylong_http 协议组件模块。

ylong_http_client 模块负责提供 HTTP 客户端功能,能够支持用户发送 HTTP 请求,并接收 HTTP 响应,内部又分为三个主要部分:

  • sync_impl:同步的 HTTP 客户端实现,该客户端实现不依赖于任何运行时,可以直接在线程模型上运行,但是整体使用同步阻塞策略。
  • async_impl:异步的 HTTP 客户端实现,该客户端实现需要使用 Rust 的异步运行时组件。异步 HTTP 客户端利用 Rust 的异步能力,具有优异的性能表现。
  • Util:同步和异步的 HTTP 客户端部分实现共通,例如自动重定向、HTTP 代理等。

sync_implasync_impl 接口原型基本一致(主要是 Rust 异步语法与同步语法的差异),所以用户可以在较小的代码改动量下完成同步和异步逻辑的切换。

sync_implasync_impl 的整体架构相同,分为如下模块:

  • Client:对外提供 HTTP 客户端的基本接口,例如配置客户端的相关选项,发送 HTTP 请求等。
  • ConnectionPool:主要负责大量连接管理,管理所有 Dispatcher 的生命周期,包括启动、运行、停止。HTTP 协议是基于连接的通信协议,涉及连接复用、连接管理等功能。
  • Dispatcher:主要负责单一连接管理,管理单个连接的启动、运行、停止、传输。每个连接都被一个 Dispatcher 管辖,由 Dispatcher 决定当前待发送的请求是不是使用它管理的连接。
  • Connections:连接对象,可以是 TCP 连接、TLS 连接或者是更加泛化的连接对象,在该连接上进行消息传输和接收,是 Client 和 HTTP 协议的底座。
  • Connector:负责创建连接对象。Connector 也是一个 trait,用户可以使用它来定义创建连接时的行为。

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

  • Redirect:HTTP 自动重定向能力。当 HTTP 响应返回重定向相关的状态码时,HTTP 客户端会进行自动重定向,并自动发送新的请求到下一跳。
  • Proxy:HTTP 代理能力。发送 HTTP 请求时,向代理发送而非直接发送给原始服务器,然后由代理服务器返回原始服务器的响应。
  • Pool:通用连接池实现,支持多个同步或异步连接的管理,便于上层同步或异步客户端复用已有连接,减少连接重复创建次数,提高性能。
  • OpenSSL_adapter:HTTPS 需要在 HTTP 的基础上使用 TLS 能力,在 OpenHarmony 上使用的是 OpenSSL,所以需要对 OpenSSL 的接口进行 Rust 封装。

ylong_http 模块负责提供 HTTP 的基础能力,例如 HTTP2 的 HPACK、HTTP3 的 QPACK 等,主要包含以下关键模块:

  • Request:HTTP 请求基础能力,根据 RFC9110 规定实现了 HTTP 请求的所有内容和行为。HTTP 请求主要用于向指定服务器发送请求。
  • Response:HTTP 响应基础能力,根据 RFC9110 规定实现了 HTTP 响应的所有内容和行为。HTTP 响应主要是服务器针对客户端请求的回应。
  • Body: HTTP 消息体能力,根据 RFC9110 规定实现了 HTTP 消息体的所有内容和行为。HTTP 消息体保存主要数据内容,以便客户端和服务器通信。 HTTP 消息体在协议中有多种形式,在 ylong_http 库中有对应实现,例如 EmptyBody 对应于空消息体,TextBody 对应于明文消息体,ChunkBody 对应于分块消息体,Mime 对应于 Multipart 消息体。
  • H1:HTTP1 的所有基础能力,例如 HTTP1 格式的请求和响应的编码器和解码器等。
  • H2:HTTP2 的所有基础能力,例如 HTTP2 格式的请求和响应的编码器和解码器、HTTP2 帧编码器和解码器、HPACK等。
  • H3:HTTP3 的所有基础能力,例如 HTTP3 格式的请求和响应的编码器和解码器、QPACK 等。

编译构建

若使用 GN 编译工具链, 在 BUILD.gndeps 段下添加依赖。添加后使用 GN 进行编译和构建:

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

若使用 Cargo 编译工具链, 在 Cargo.toml 下添加依赖。添加后使用 cargo 进行编译和构建:

[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 基础组件库代码示例
│   ├── src                     # ylong_http 基础组件库源码
│   │   ├── body                # Body trait 定义和扩展 Body 类型
│   │   ├── h1                  # HTTP/1.1 相关组件实现
│   │   ├── h2                  # HTTP/2 相关组件实现
│   │   ├── h3                  # HTTP/3 相关组件实现
│   │   ├── huffman             # Huffman 编解码实现
│   │   ├── request             # Request 定义和实现
│   │   └── response            # Response 定义和实现
│   └── tests                   # ylong_http 基础组件库测试目录
│
└── ylong_http_client
    ├── examples                # ylong_http_client 库代码示例
    ├── src                     # ylong_http_client 库源码
    │   ├── async_impl          # ylong_http_client 异步客户端实现
    │   │   ├── conn            # 异步连接层
    │   │   ├── downloader      # 异步下载器实现
    │   │   ├── ssl_stream      # 异步 tls 适配层
    │   │   └── uploader        # 异步上传器实现   
    │   ├── sync_impl           # ylong_http_client 同步客户端实现
    │   │   └── conn            # 同步连接层
    │   └── util                # ylong_http_client 组件实现
    │       ├── c_openssl       # OpenSSL 封装层
    │       │   ├── ffi         # ffi 封装层
    │       │   └── ssl         # ssl 适配层
    │       └── config          # 配置选项实现
    │           └── tls         # TLS 选项实现
    │               └── alpn    # ALPN 实现
    └── tests                   # ylong_http_client 库测试目录

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2634

    浏览量

    66212
  • HarmonyOS
    +关注

    关注

    79

    文章

    1967

    浏览量

    30012
  • OpenHarmony
    +关注

    关注

    25

    文章

    3658

    浏览量

    16143
  • 鸿蒙OS
    +关注

    关注

    0

    文章

    188

    浏览量

    4367
收藏 人收藏

    评论

    相关推荐

    鸿蒙网络开发学习:【ylong_http

    ylong_http 构建了完整的 HTTP 能力,支持用户使用 HTTP 能力完成通信场景的需求。 ylong_http 使用 Rust 编写,为 OpenHarmony 的
    的头像 发表于 03-25 16:36 694次阅读
    <b class='flag-5'>鸿蒙</b>网络<b class='flag-5'>开发</b>学习:【<b class='flag-5'>ylong_http</b>】

    鸿蒙实战项目开发:【短信服务】

    、OpenHarmony 多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发鸿蒙项目实战等等)鸿蒙(Harmony NEXT) 技术知识点 如果你是一名An
    发表于 03-03 21:29

    鸿蒙原生应用开发-网络管理HTTP数据请求

    http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表,具体的接口说明请参考API文档。 三、request接口开发步骤 1.从
    发表于 03-29 17:51

    鸿蒙Flutter实战:07混合开发

    # 鸿蒙Flutter实战:混合开发 鸿蒙Flutter混合开发主要有两种形式。 ## 1.基于har 将flutter module
    发表于 10-23 16:00

    鸿蒙Flutter实战:08-如何调试代码

    # 鸿蒙Flutter实战:如何调试代码 ## 1.环境搭建 参考文章[鸿蒙Flutter实战:01-搭建开发环境](https://g
    发表于 10-23 16:29

    【专家问答】杨光明:鸿蒙系统研发工程师教你从0开发鸿蒙PCB开发

    `前言:本期我们邀请到了张飞实战电子团队的鸿蒙系统研发工程师杨光明老师@aMi杨光明,本期高手问答中老师将为我们解答大家在Linux系统开发,单片机开发,以及在进行
    发表于 09-25 15:24

    课程推荐【1】 | 鸿蒙设备开发入门

    ,Android。出版书籍《物联网——嵌入式开发实战》你将会学到:本课程将带大家入门HarmonyOS设备开发,以Hi3861鸿蒙开发板为例
    发表于 12-28 16:26

    LabVIEW入门与实战开发100例

    LabVIEW入门与实战开发100例LabVIEW入门与实战开发100例LabVIEW入门与实战开发
    发表于 02-18 11:44 0次下载

    HarmonyOS测试技术与实战-HarmonyOS图形栈测试技术深度解析

    HDC 2021华为开发者大会HarmonyOS测试技术与实战-HarmonyOS图形栈测试技术深度解析
    的头像 发表于 10-23 15:09 1508次阅读
    HarmonyOS测试技术与<b class='flag-5'>实战</b>-HarmonyOS图形栈测试技术深度<b class='flag-5'>解析</b>

    华为开发者大会分论坛HarmonyOS测试技术与实战-鸿蒙智联认证生态设备测试挑战

    HDC 2021华为开发者大会分论坛HarmonyOS测试技术与实战-鸿蒙智联认证生态设备测试挑战
    的头像 发表于 10-23 16:40 1784次阅读
    华为<b class='flag-5'>开发</b>者大会分论坛HarmonyOS测试技术与<b class='flag-5'>实战</b>-<b class='flag-5'>鸿蒙</b>智联认证生态设备测试挑战

    arduino开发实战指南

    arduino开发实战指南
    发表于 02-22 14:56 0次下载

    Python项目开发实战

    Python项目开发实战
    发表于 06-13 14:51 2次下载

    鸿蒙开发实战:【Hdf Framework】

    该仓主要存放OpenHarmony驱动子系统核心源码信息(包括驱动框架、配置管理、配置解析、驱动通用框架模型、硬件通用平台能力接口等),旨在为开发者提供更精准、更高效的开发环境,力求做到一次
    的头像 发表于 03-21 20:29 431次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b>:【Hdf Framework】

    鸿蒙OS开发实战:【网络管理HTTP数据请求】

    应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。
    的头像 发表于 04-01 16:31 665次阅读
    <b class='flag-5'>鸿蒙</b>OS<b class='flag-5'>开发</b><b class='flag-5'>实战</b>:【网络管理<b class='flag-5'>HTTP</b>数据请求】

    鸿蒙OS开发实例:【HarmonyHttpClient】网络框架

    鸿蒙上使用的Http网络框架,里面包含纯Java实现的HttpNet,类似okhttp使用,支持同步和异步两种请求方式;还有鸿蒙版retrofit,和Android版Retrofit相似的使用,解放双手般优雅使用注解、自动
    的头像 发表于 04-12 16:58 801次阅读
    <b class='flag-5'>鸿蒙</b>OS<b class='flag-5'>开发</b>实例:【HarmonyHttpClient】网络框架