HarmonyOS-ArkUI Rcp模块类关系梳理

前言

本文重点解决的是,按照官网学习路径学习Tcp模块内容时,越看越混乱的问题。仿照官网案例,书写代码时,产生的各种疑惑。比如,类与类之间的关系,各种配置信息究竟有多少,为什么越写越混乱。那些官方文档中并没有提及的令人迷惑的地方。

本篇文章适合在看RCP官方教程之前,做辅助铺垫用。以便于更容易理解其代码书写原因,做到写一遍之后就不用再参照文档,自己自然就知道怎么写了。官方教程连接如下

对于文章中有些图片由于太大展示模糊,请在附件中下载,便于清晰阅览!

华为开发者学堂

好接下来讲讲这个RCP模块。

正文

Rcp我之前知之甚少。查了一下才知道这个协议很适合分布式系统的实现,是分布式系统实现高效通讯的重要工具。并且是官方主推替代http模块的工具。

原因是,Rcp可以实现http能实现的能力,而且能做到http做不到事, 比Http更好用,具备更多的功能。

RCP提供的能力与设置,涵盖了整个Http所有环节

  • 发起网络请求
  • 多表单提交
  • 双向证书校验
  • DNS灵活的解析方式(系统,自定义)
  • 数据发送数据传输与数据响应拦截
  • 捕获有关http发送流,响应流的信息

RCP请求过程

首先先对请求过程有大致的了解,接下来我们重点介绍的,RCP代码中, 请求配置参数,几乎涵盖每一个细节的配置方式。大家看到配置信息的时候,能回顾到大致会影响到哪些环节即可。

RCP框架简介

  • RCP全称 Remote Communication Platform。其通过对HTTP协议的NAPI封装,提供基于场景化的声明式开发范式API接口,使开发人员无需处理低级别的HTTP细节,降低代码量并提升开发效率。
  • 提供基于会话的多线程模型,并动态调整和部署HTTP参数。
  • 相比于ohos.net.http模块。RCP在并发场景下进行了性能优化,使数据传输更快,性能更强。

代码实现及代码使用上的关系梳理

Session

Session指的是会话,它主要用于管理一组相关的请求(Request)与响应(Response)。 也就是跟请求是1vn的关系。

它管理的是很多请求,这点需要着重理解下。同时Session内部管理了一组TCP连接,是一组!

  • 允许的最大并发TCP连接数,默认值为6条, 允许设置的最大的数量是2147483647条。
  • Session允许多个TCP连接同时连接,最大活跃条数支持量为64条, 允许设置的最大值也是2147483647条。
  • Session内部像Http一样实现了底层对TCP连接的复用。避免TCP连接频繁所带来的客户端和服务端资源浪费。
  • 正因为上述两个原因,它才能管理一组的相关请求与响应的。所以,一个Session的生命周期,可以很长。绝对要长过一条http请求。

一个应用最多能创建16个Session。 超出范围会报错。

Request 与 Response

Request指的是Http请求对象。用于构造http请求的信息,通过Session发送出去,从而获得对应的数据响应(Response)

关系总结

Session是一个生命周期略长的会话,在会话期间,可以发送多条Request,从而获取Response。

所以他们的使用规则在代码上的表现为:

// 首先先创建一个Session实例,此为最简单的实例创建方式。商业代码中会很复杂。
// 此session之后会不断地被用来发送请求。与request是1vn的关系
const session = rcp.createSession(sessionCfg)// 创建一个request实例, request实例会有很多参数,之后我们会涉及学习。
let req = new rcp.Request('/test/post', 'POST', rcpHeader, multiForm, cookies, transferRange, configuration)// 发送
session.fetch(req).then((response) => {hilog.info(this.LOG_DOMAIN, this.LOG_TAG, "rcp request fetch success! response=" + JSON.stringify(response))}).catch((err : BusinessError) => {hilog.error(this.LOG_DOMAIN, this.LOG_TAG, "rcp request fetch error! err=" + JSON.stringify(err))
})

最粗略的调用关系就是这些。

有关于RCP中的各项Configuration

在商用代码中的调用,远不如上一节中的代码那么简单。要确保数据的传输绝对安全,也要确保数据的传输速度很快,很高效。另外,对于每一条请求还有一些统计上的需求,比如响应延迟时常,正确回复率等等,这是服务端伙伴们向上汇报的重要数据。总之啊,商用代码要加一些配置才能确保数据传输的安全和高效,这里讲的配置就是Configuration。

Session实例中的配置-SessionConfiguration

上文已经讲到了,Session负责的是n多条TCP连接,掌管n多个http请求响应过程。所以Session的配置有以下特点

  • 配置内容偏公共偏基础,以便于每一条请求响应中可以用到
  • 有一些不乏便于管理的配置项

createSession函数的声明为:

export function createSession(sessionConfiguration?: SessionConfiguration): Session;

在使用的时候我们直接用rcp调用即可。传入的参数就是配置参数 SessionConfiguration。

const session = rcp.createSession(sessionCfg) // sessionCfg为 SessionConfiguration对象, 管配置的

SessionConfiguration

SessionConfiguration是一个很庞大的配置类,其下聚合了很多方面的配置。这些配置单看源码的话,非常容易混淆,使用的时候需要不断的查源码看调用方式。比较麻烦。 另外就是。config的存在,便于我们按图索骥,大约能估摸出来这个RCP具体实现了什么能力。

我画了一张图,便于查看持有关系,以及分类脉络便于记忆。由于图片太大,本文附件中会包含一份整理完的原图。

Request实例中的配置

Request实例的初始化方法是:

let req = new rcp.Request('/test/post', 'POST', rcpHeader, multiForm, cookies, transferRange, configuration)

这个request初始化的时候,是需要很多参数的,我们这个章节讲的就是配置,只拿最后一个参数讲,就是Request的专有配置, 类型为 Configuration。

constructor(url: URLOrString, method?: HttpMethod, headers?: RequestHeaders, content?: RequestContent, cookies?: RequestCookies, transferRange?: TransferRange | TransferRange[], configuration?: Configuration);

这个Configuration与Session对象创建时传入的SessionConfiguration中的 requestConfiguration属性,类型是一样的。也就是Session间接持有了一个Configuration, 而Request直接持有了 Configuration, 与此同时还存在一些配置项,如Header, Cookies 都有可能在整个系统中出现两份!

接下来明了了,也就是如图所示,Session创建实例的时候传入的配置信息,和Request创建实例的时候传入的配置信息,有一部分是冲突的!存在冲突的可能!

session组件,Request组件同时设置configuration,哪个会生效

既然代码设置的时候,像上一章讲的存在两份,那么必然会存在冲突问题。RCP模块中对于这种冲突的处理流程如下图所示:

Configuration以request组件中的参数为准, 如果request中没有设置,就以session为准。

Response对象

对于Response对象,这个就是请求之后返回来的响应对象。对于这个对象的了解,侧重点就是其数据结构。它里面的属性很多都是只读的。我们知道什么属性存什么数据就行了。

我将Response也画了一个图,以便于有大致的印象。

铺垫好这些内容之后,请大家愉快的学习官方文档吧:

华为开发者学堂

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

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

相关文章

【云计算物理网络】数据中心网络架构设计

云计算的物理基础:数据中心网络架构设计 一、技术背景:从“三层架构”到“云原生网络”二、技术特点:云数据中心网络的四大支柱三、技术细节:CLOS架构的实现挑战四、未来方向:从“连接设备”到“感知服务”结语&#x…

window11 通过cmd命令行安装 oh my zsh 的教程

步骤 1:安装 WSL 2 和 Ubuntu 1. 以管理员身份打开 CMD wsl --install -d Ubuntu此命令会自动安装 WSL 2 和 Ubuntu 发行版。 安装完成后重启系统。 初始化 Ubuntu 在开始菜单中打开 Ubuntu,设置用户名和密码。 步骤 2:在 WSL 的 Ubunt…

gdb 调试命令记录

启动调试 gdb ./待调试的程序 #不带参数 (gdb) run #带参数 gdb --args ./your_program arg1 arg2 arg3 (gdb) run arg1 arg2 arg3 #图形化代码界面 (gdb) layout src基础调试命令 命令缩写作用run [args]r运行程序&#xff08;可带命令行参数&#xff09;break <locatio…

STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步

主题内容教学目的/扩展视频低功耗模式什么是低功耗&#xff0c;模式介绍&#xff0c;切换方法。为电池设备开发做准备。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、低功耗模式概述1.1 为什么需要低功耗模式&#xff1f;1.2 基本实现原理 二、低功耗模式的本…

JavaScript instanceof 运算符全解析

JavaScript instanceof 运算符全解析 核心语义: 判断一个对象(object)是否属于某个构造函数(constructor)或类的实例,基于原型链(prototype chain)实现类型检测。 一、JavaScript 中的基础用法 1. 语法结构 object instanceof constructor 返回值:布尔值(true/fal…

电脑基础之word基础操作

word是常用的办公软件之一&#xff0c;用于文档编辑&#xff0c;如合同/报告撰写、论文等‌。 一、简介 word文档最早由微软推出&#xff0c;通过Microsoft Office Word软件创建和编辑。由于涉及版权付费问题&#xff0c;大多数个人使用盗版软件。后来金山出了WPS office免费软…

深度解析Python代码中的广告信息提取与JSON处理

哈喽,大家好,我是木头左! 在当今数字化时代,广告无处不在,而从广告中提取关键信息并进行处理则成为了一项重要的技能。本文将深入剖析一段Python代码,该代码旨在从给定的JSON格式字符串中提取广告相关信息,并对其进行解析和处理。通过这段代码,将展示如何运用Python的j…

base64在线解码工具

我们经常会用到base64编码&#xff0c;相应的base64解码成为日常必备&#xff0c;所有我们需要拥有一个base64在线解码工具 base64在线解码工具

Linux——进程信号(3)(信号保存与信号捕捉)

进程信号3 信号保存信号相关概念详解信号集&#xff08;sigset_t&#xff09;及操作函数详解 信号捕捉信号捕捉的详细流程解析信号捕捉的核心概念信号捕捉的完整流程&#xff08;以 SIGQUIT 为例&#xff09; 信号保存 信号相关概念详解 1.核心概念 (1) 信号递达&#xff08…

批量在 txt 记事本文件的指定位置插入行,如在最末尾位置插入行

我们在网上下载的小说经常可以看到内容中每隔多少行都会现一些网站名称和联系方式等广告信息&#xff0c;这些都是固定或者随机插入在小说正文中的。那是怎么样实现在文本文件中指定位置插入这些行的呢&#xff1f;今天就给大家介绍一下如何在 txt 记事本文件或者其它类型的文本…

python的内存管理机制

目录 内存分配方式自动内存管理内存分配策略 垃圾回收机制引用计数垃圾回收对象创建和引用关系引用计数的状态删除变量 标记 - 清除垃圾回收 内存分配的区域划分栈内存堆内存 内存管理的优化内存池技术对象共享 Python 的内存管理机制是其运行效率和安全性的重要保障&#xff0…

火山引擎coze用户市场

火山引擎 **Coze**&#xff08;扣子&#xff09;的用户市场主要集中在 **需要快速构建和部署智能对话应用的企业及开发者群体**&#xff0c;覆盖多个行业与场景。以下是具体分析&#xff1a; --- ### **一、核心用户群体** 1. **企业用户** - **互联网/科技公司**&#…

Java 责任链模式 详解

责任链模式详解 一、责任链模式概述 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式&#xff0c;它允许你将请求沿着处理链传递&#xff0c;直到有一个处理者能够处理它为止。这种模式解耦了请求的发送者和接收者&#xff0c;使多个对象都有机会处理请求。…

【C++初阶】--- string类

1.STL简介 STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 2.string类 2.1什么是string类 std::string 类是 C 标准库中用于处理和操作字符串…

Ubuntu 20.04 中 Git 的安装、配置和基本操作指南

本文为经验 所谈 使用版本为ubuntu20.04 1 ubuntu的git初始化 1.安装git sudo apt-get install git 可通过git --version 命令查看&#xff0c;正常输出git版本号即安装成功。 2.配置用户名和邮箱名 git config --global user.name "Your Name" git config --globa…

conda 激活环境vscode的Bash窗口

多份conda环境注意事项&#xff0c;当时安装了两个conda环境&#xff0c;miniconda和conda&#xff0c;导致环境总是冲突矛盾。初始化时需要更加注意。 $ C:/Users/a_hal/miniconda3/Scripts/conda.exe init bash能够显示用哪里的conda环境命令执行。 然后直接conda activate…

Mac下小智AI本地环境部署

可以进行聊天、编写程序、播放歌曲等等的小智语音聊天小助手&#xff0c;在Mac环境下修改源代码&#xff0c;值得拥有。本篇内容主要讲解Mac下环境的搭建&#xff0c;WebSocket的修改。注&#xff1a;环境python3.12.0、ESP-IDF5.4.0、开发板ESP32S3。 目录 1.Git安装2.Python…

Linux安装Cmake (Centos 7.9)

cmake安装 这个虽然已经更新到了4.0.0版本了&#xff0c;但是我们要用3.5版本的&#xff0c;因为这个比较稳定 官方地址&#xff1a;https://github.com/Kitware/CMake/releases/tag/v3.5.0&#xff0c;选择那个cmake-3.5.0-Linux-x86_64.tar.gz下载&#xff0c; 首先解压文…

基于 SpringBoot 的旧物置换网站

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…

ELK 通过 logstash 收集单个/多个日志文件

一、收集单个日志文件 注意事项&#xff1a; logstah 服务默认启动用户和组是 logstash被收集的日志文件有读的权限并对写入的文件有写权限而 logstash 是普通用户 1.1 编辑 logstash 配置文件 vim /etc/logstash/conf.d/test.conf input {file {path > "/var/log/…