鸿蒙网络开发学习:【ylong_http】

简介

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 等。

鸿蒙开发知识更新前往gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md参考。

鸿蒙开发OpenHarmony就业必修技能.png

编译构建

若使用 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" } # 请使用路径依赖

持续更新中,关注我~不迷路
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Adaptive Object Detection with Dual Multi-Label Prediction

gradient reversal layer (GRL) 辅助信息 作者未提供代码

蓝桥杯需要掌握的几个案例(C/C++)

文章目录 蓝桥杯C/C组的重点主要包括以下几个方面:以下是一些在蓝桥杯C/C组比赛中可能会涉及到的重要案例类型:1. **排序算法案例**:2. **查找算法案例**:3. **数据结构案例**:4. **动态规划案例**:5. **图…

java 高级面试题(借鉴)(下)

雪花算法原理 第1位符号位固定为0,41位时间戳,10位workId,12位序列号,位数可以有不同实现。 优点:每个毫秒值包含的ID值很多,不够可以变动位数来增加,性能佳(依赖workId的实现…

数据结构面试题

1、数据结构三要素? 逻辑结构、物理结构、数据运算 2、数组和链表的区别? 数组的特点: 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。数组的插入数据和删除数据效率低…

v77.递归

理解&#xff1a; 函数直接或者间接地调用自身&#xff1b;并且有边界条件。 1&#xff1a; #include <stdio.h> int main() {int result fun(3);printf("%d",result);return 0 ; } int fun(int num) {if(num 1)return num;return num fun(num-1); }思路…

raise PyAutoGUIException! ! !

在了解pyautogui时&#xff0c;你是否遇到过这样的情况&#xff1a; y pyautogui.locateOnScreen(kk.png) print(y) 在信心满满下输入完成后选择直接运行&#xff0c;结果却是抛出异常的尴尬。 raise PyAutoGUIException( pyautogui.PyAutoGUIException: PyAutoGUI was unable…

一文详解Rust中的字符串

有人可能会说&#xff0c;字符串这么简单还用介绍&#xff1f;但是很多人学习rust受到的第一个暴击就来自这浓眉大眼、看似毫无难度的字符串。 请看下面的例子。 fn main() {let my_name "World!";greet(my_name); }fn greet(name: String) {println!("Hello…

[leetcode] 240. 搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,…

LeetCode讲解算法2-数据结构[栈和队列](Python版)

文章目录 一、栈1.1 栈的定义1.2 栈的实现分析步骤1.3 栈的应用匹配圆括号匹配符号模2除法&#xff08;十进制转二进制&#xff09;进制转换 二、队列2.1 单向队列2.2 双端队列2.3 队列的应用验证回文串滑动窗口最大值 一、栈 1.1 栈的定义 栈是一种线性数据结构&#xff0c;栈…

机器人路径规划:基于鳑鲏鱼优化算法(BFO)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

如何在C语言中使用命令行参数

C语言文章更新目录 C语言学习资源汇总&#xff0c;史上最全面总结&#xff0c;没有之一 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程…

Negative Sampling with Adaptive DenoisingMixup for Knowledge Graph Embedding

摘要 知识图嵌入(Knowledge graph embedding, KGE)的目的是通过对比正负三元组&#xff0c;将知识图中的实体和关系映射到一个低维、密集的向量空间中。在kge的训练过程中&#xff0c;由于kge只包含正三元组&#xff0c;因此负采样对于找到高质量的负三元组至关重要。大多数现…

如何申请代码签名证书

代码签名证书也是数字证书的一种&#xff0c;其主要作用是对可执行脚本、软件代码和内容进行数字签名的数字证书。代码签名证书用于验证开发者身份真实性、保护代码的完整性。用户下载软件时&#xff0c;能通过数字签名验证软件来源&#xff0c;确认软件、代码没有被非法篡改或…

有道翻译实现接口加密解密

文章目录 目标简单逆向分析源码深度逆向分析参考文献目标 实现对网易有道 sign 等参数的加密 及 返回的密文数据解密实现 简单逆向分析 首先在右上角提前登录好账号信息。 输入中文:你好 要求翻译成:英文 全局搜索:你好 或 hello,结果没有发现什么。 切换 Fetch/XHR …

关于YOLOv9项目的使用说明。

​ 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 使用说明 1. 下载解压 首先&#xff0c;在进群之后&#xff0c;使用群公告中的百度云链接进行下载。 下载完成后解压打开&#xff0c;会得到一个…

代码随想录算法训练营第三十二天 | 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II

代码随想录算法训练营第三十二天 | 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II 122. 买卖股票的最佳时机 II题目解法 55. 跳跃游戏题目解法 45. 跳跃游戏 II题目解法 感悟 122. 买卖股票的最佳时机 II 题目 解法 贪心&#xff1a;局部最优&#xff1a;收集每…

你虽然不一定用得到但一定要知道的ChatGPT五大功能

ChatGPT拥有许多功能&#xff0c;但很多人并没有充分利用这些功能&#xff0c;从而错失了这个全球领先的AI聊天机器人的全部潜力。 以下是你绝对应该尝试的五个ChatGPT功能。 朗读功能 2024 年 3 月&#xff0c;OpenAI 推出了 ChatGPT的朗读功能&#xff0c;使这个AI工具能够…

C#学习笔记1:C#基本文件结构与语法

现在开始我的C#学习之路吧&#xff0c;这也许不适合0编程基础的人看&#xff0c;因为我会C语言了&#xff0c;笔记做的可能有思维上的跳跃&#xff0c;如果0基础可能会觉得有些地方转折得莫名奇妙&#xff0c;但我的学习笔记实操还是比较多的&#xff0c;基本都是真实运行程序结…

vue3项目初始化

初始化项目newsapp VSCode 打开终端&#xff0c;newsapp项目目录&#xff0c;可自定义 vue create newsapp 有提示“因为在此系统上禁止运行脚本”的话&#xff0c;请执行 set-ExecutionPolicy RemoteSigned 执行后再重复执行vue create newsapp 注意选择Vue 3版本 测试项…

vector类详解及重要函数实现

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 今日主菜&#xff1a;vector类 主厨&#xff1a;邪王真眼 所属专栏&#xff1a;c专栏 主厨的主页&#xff1a;Chef‘s blog 坚持下去&#xff0c;成功不是目的&a…