!224 merge master into master
开启安全编译选项
Created-by: dragonswordy Commit-by: ljy9810 Merged-by: openharmony_ci Description: ### 一、内容说明(相关的Issue) https://gitcode.com/openharmony/commonlibrary_rust_ylong_http/issues/197
二、建议测试周期和提测地址
建议测试完成时间:xxxx.xx.xx
投产上线时间:xxxx.xx.xx
提测地址:CI环境/压测环境
测试账号:三、变更内容
3.1 关联PR列表
3.2 数据库和部署说明
- 常规更新
- 重启unicorn
- 重启sidekiq
- 迁移任务:是否有迁移任务,没有写 “无”
- rake脚本:
bundle exec xxx RAILS_ENV = production;没有写 “无”3.4 其他技术优化内容(做了什么,变更了什么)
- 重构了 xxxx 代码
- xxxx 算法优化
- 3.5 废弃通知(什么字段、方法弃用?)
- 3.6 后向不兼容变更(是否有无法向后兼容的变更?)
四、研发自测点(自测哪些?冒烟用例全部自测?)
自测测试结论:
五、测试关注点(需要提醒QA重点关注的、可能会忽略的地方)
检查点:
需求名称 是否影响xx公共模块 是否需要xx功能 需求升级是否依赖其他子产品 xxx 否 需要 不需要 接口测试:
性能测试:
并发测试:
其他:
See merge request: openharmony/commonlibrary_rust_ylong_http!224
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
ylong_http
简介
ylong_http 构建了完整的 HTTP 能力,支持用户使用 HTTP 能力完成通信场景的需求。
ylong_http 使用 Rust 编写,为 OpenHarmony 的 Rust 能力构筑提供支持。
ylong_http 在 OpenHarmony 中的位置
ylong_http 向 OpenHarmony 系统服务层中的网络协议栈模块提供 HTTP 协议支持,经由网络协议栈模块帮助上层应用建立 HTTP 通信能力。
以下是对于上图关键字段的描述信息:
APP:需要使用上传下载能力的直接面向用户的上层应用。request:提供上传下载能力的系统组件。netstack:提供网络协议栈功能的系统组件。ylong_http:提供 HTTP 能力的系统组件。ylong_http_client:ylong_http下的模块之一,提供 HTTP 客户端能力。ylong_http:ylong_http下的模块之一,提供 HTTP 的基础能力。ylong_runtime:ylong提供的 Rust 异步运行时库。tokio:业界常用的第三方 Rust 异步运行时库。OpenSSL:业界常用的第三方 TLS 实现库。ylong_http 的内部架构:
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_impl和async_impl接口原型基本一致(主要是 Rust 异步语法与同步语法的差异),所以用户可以在较小的代码改动量下完成同步和异步逻辑的切换。sync_impl和async_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.gn的deps段下添加依赖。添加后使用 GN 进行编译和构建:若使用 Cargo 编译工具链, 在
Cargo.toml下添加依赖。添加后使用cargo进行编译和构建:目录
用户指南
详细内容请见用户指南