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也画了一个图,以便于有大致的印象。

铺垫好这些内容之后,请大家愉快的学习官方文档吧:
华为开发者学堂
相关文章:
HarmonyOS-ArkUI Rcp模块类关系梳理
前言 本文重点解决的是,按照官网学习路径学习Tcp模块内容时,越看越混乱的问题。仿照官网案例,书写代码时,产生的各种疑惑。比如,类与类之间的关系,各种配置信息究竟有多少,为什么越写越混乱。那…...
26考研——线性表_ 线性表的链式表示_双循环链表(2)
408答疑 文章目录 三、 线性表的链式表示双循环链表单链表与双链表的比较单链表的特点双链表的特点 双链表上基本操作的实现双链表的插入操作双链表的删除操作 双链表的代码实操定义结点创建一个结点带头结点的双链表初始化创建双链表打印双链表查找结点插入结点在指定节点后插…...
大模型如何引爆餐饮与电商行业变革
大模型如何引爆餐饮与电商行业变革? 一、时代背景:大模型重构产业逻辑的底层动力 1. 技术跃迁催生效率革命 2025年,大模型技术迎来"普惠临界点"。李开复在中关村论坛指出,大模型推理成本每年降低10倍,使得…...
基于springboot的考研成绩查询系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 这些年随着Internet的迅速发展,我们国家和世界都已经进入了互联网大数据时代,计算机网络已经成为了整个社会以及经济发展的巨大动能,考研成绩查询管理事务现在已经成为社会关注的重要内容,因此运用互联网技术来提高考研成绩…...
es自定义ik分词器中文词库实现热更新
基于web地址的方式实现ik分词热更新。 操作系统:win 11 es version:8.6.2 ik version:8.6.2 1、创建web服务,并提供ik查询词库接口 编写分词http url代码,返回自定义分词内容分词词库数据来自业务需求,存…...
OpenStack 卷虚拟机跨租户迁移方案
目标:迁移租户A的卷虚机到租户B 场景:使用卷虚拟机,租户a和b使用相同网络 租户A的操作: 1.记录虚拟机的ip地址,Mac信息, nova interface-list neutron port-show 2.对虚拟机进行关机操作,将…...
添加购物车功能
业务需求: 用户提交三个字段,服务端根据提交的字段判断是菜品还是套餐,根据菜品或者套餐添加购物车表中。 代码实现 RestController Slf4j RequestMapping("/user/shoppingCart") public class ShoppingCartController {Autowired…...
Logo语言的系统监控
Logo语言的系统监控 引言 在信息技术飞速发展的时代,系统监控成为了确保计算机系统和网络平稳运行的重要手段。系统监控不仅可以实时跟踪系统的性能、资源使用情况和安全风险等,还能够在出现问题时及时发出警报,从而避免潜在的故障和损失。…...
Scheme语言的算法
Scheme语言的算法探索 引言 Scheme是一种以表达式为基础的编程语言,属于Lisp家族,因其简洁、灵活的语法而受到广泛关注。Scheme不仅适合教学,还被用于实际应用开发和研究。本文将深入探讨Scheme语言的算法,包括其基本特性、常用…...
Python爬虫第2节-网页基础和爬虫基本原理
目录 一、网页基础 1.1 网页的组成 1.2 网页的结构 1.3 节点树及节点间的关系 1.4 选择器 二、爬虫的基本原理 2.1 爬虫概述 2.2 能抓怎样的数据 2.3 JavaScript 渲染页面 一、网页基础 使用浏览器访问网站时,我们会看到各式各样的页面。你是否思考过&…...
阿里巴巴langengine二次开发大模型平台
阿里巴巴LangEngine开源了!支撑亿级网关规模的高可用Java原生AI应用开发框架 - Leepy - 博客园 阿里国际AI应用搭建平台建设之路(上) - 框架篇 基于java二次开发 目前Spring ai、spring ai alibaba 都是java版本的二次基础能力 重要的是前端工作流 如何与 服务端的…...
深度学习中的 Batch 机制:从理论到实践的全方位解析
一、Batch 的起源与核心概念 1.1 批量的中文译名解析 Batch 在深度学习领域标准翻译为"批量"或"批次",指代一次性输入神经网络进行处理的样本集合。这一概念源自统计学中的批量处理思想,在计算机视觉先驱者Yann LeCun于1989年提出…...
【网络协议】三次握手与四次挥手
例如我们使用MobaXterm登录服务器的时候,基于TCP协议的之间是如何进行通信的? 使用工具:wireshark抓取传输层TCP协议 三次握手 mobaxterm:登录服务器触发三次握手 wireshark过滤分析 ip.addr 192.168.3.239 192.168.3.239登录…...
请求被中止: 未能创建 SSL/TLS 安全通道。
需要安装vs2019社区办,下载VisualStudioSetup.exe后,报无法从"https://aka,ms/vs/16/release/channel"下载通道清单错误,接着打开%temp%目录下的最新日志,发现日志里报: [27d4:000f][2025-04-04T21:15:43] …...
JS API
const变量优先 即对象、数组等引用类型数据可以用const声明 API作用和分类 DOM (ducument object model) 操作网页内容即HTML标签的 树状模型 HTML中标签 JS中对象 最大对象 document 其次大 html 以此类推 获取DOM对象 CSS 中 使用选择器 JS 中 选多个 时代的眼泪 修…...
“一路有你”公益行携手《东方星动》走进湖南岳阳岑川镇中心小学
2025年4月2日,“一路有你”公益行携手《东方星动》走进湖南岳阳岑川镇,一场充满爱与温暖的捐赠仪式在岑川镇中心小学隆重举行。这是一场跨越千里的爱心捐赠,也是一场别开生面的国防教育,更是一场赋能提质的文化盛宴。 岑川镇地处湘…...
vue组件开发:什么是VUE组件?
什么是VUE组件 在我们实际开发过程中你也许会发现有很多代码是重复的,它们可能是一个按钮、一个表单、一个列表等等,其中最为显著的应该是列表。 以CSDN的首页为例: 上述截图中的文章列表可能会在多处出现,比如此截图是精选博客…...
仿小红书社交源码+及时通讯聊天软件APP源码
多端支持,数据互通 本程序支持H5、小程序、安卓、iOS四端运行,共用同一套后台管理系统,确保数据同步,用户可在不同设备上无缝切换,实现真正的多端互通。 技术架构 前端技术:Vue2、uni-app、HTML、CSS、Jav…...
Libevent TCP开发指南
一、概念 Libevent 提供了高效的 TCP 网络编程接口,使开发者能够轻松构建高性能的 TCP 服务器和客户端。本指南将详细介绍如何使用 Libevent 进行 TCP 网络开发。 核心组件 事件基 (event_base) - 事件处理的核心结构 事件 (event) - 表示单个事件 缓冲区事件 (bufferevent)…...
Objective-C语言的集合
Objective-C语言的集合 引言 Objective-C是一种面向对象的编程语言,主要用于苹果的macOS和iOS系统应用程序的开发。作为C语言的一个超集,Objective-C继承了C语言的优雅,同时又添加了许多强大的特性,使其适合于大型项目的开发。在…...
网络安全与防护策略
随着互联网的普及与信息化程度的不断加深,网络安全问题已成为全球关注的焦点。从个人用户到大规模的企业系统,网络安全威胁的不断演变和升级已成为每个人和组织不可忽视的挑战。无论是恶意软件、钓鱼攻击,还是数据泄露、拒绝服务攻击…...
OpenCV:计算机视觉的强大开源库
文章目录 引言一、什么是OpenCV?1.OpenCV的核心特点 二、OpenCV的主要功能模块1. 核心功能(Core Functionality)2. 图像处理(Image Processing)3. 特征检测与描述(Features2D)4. 目标检测&#…...
Java基础:面向对象进阶(二)
01-static static修饰成员方法 static注意事项(3种) static应用知识:代码块 static应用知识:单列模式 02-面向对象三大特征之二:继承 什么是继承? 使用继承有啥好处? 权限修饰符 单继承、Object类 方法重…...
【MVP 和 MVVM 相比 MVC 有哪些优化点?】
MVP 和 MVVM 相比 MVC 的优化及原因 1. MVC 的痛点 在传统 MVC 模式中: 视图(View)和模型(Model)直接交互:View 可能直接监听 Model 的变化(如观察者模式),导致耦合。…...
ttkbootstrap 实现日期选择器, 开始和结束时间
ttkbootstrap 实现日期选择器, 开始和结束时间 1. 展示 2. 打印 3. 源码 from datetime import datetime import ttkbootstrap as ttkclass DateTimeEntryStart(ttk.Frame):def __init__(self, masterNone, **kwargs):super().__init__(master, **kwargs)self.dat…...
Vulnhub-PrinkysPalacev3
Vulnhub-PrinkysPalacev3 1、主机发现 arp-scan -l 扫描同网段 2、端口扫描 nmap -sS -sV 192.168.66.185 nmap -sS -A -T4 -p- 192.168.66.185 nmap --scriptvuln 192.168.66.185 PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.0.8 or later 5555/tcp o…...
matlab从pytorch中导入LeNet-5网络框架
文章目录 一、Pytorch的LeNet-5网络准备二、保存用于导入matlab的model三、导入matlab四、用matlab训练这个导入的网络 这里演示从pytorch的LeNet-5网络导入到matlab中进行训练用。 一、Pytorch的LeNet-5网络准备 根据LeNet-5的结构图,我们可以写如下结构 import…...
淘宝商品数据爬取与分析
淘宝商品数据爬取与分析是一个涉及网络爬虫技术和数据分析方法的过程,以下是其主要步骤: 数据爬取 确定爬取目标:明确要爬取的淘宝商品类别、具体商品名称或关键词等,例如想要分析智能手机市场,就以 “智能手机” 为…...
Spring Boot向Vue发送消息通过WebSocket实现通信
注意:如果后端有contextPath,如/app,那么前端访问的url就是ip:port/app/ws 后端实现步骤 添加Spring Boot WebSocket依赖配置WebSocket端点和消息代理创建控制器,使用SimpMessagingTemplate发送消息 前端实现步骤 安装sockjs-…...
Django4.0的快速查询以及分页
1. filter 方法 filter 是 Django ORM 中最常用的查询方法之一。它用来根据给定的条件过滤查询集并返回满足条件的对象。 articles Article.objects.all() # 使用 SearchFilter 进行搜索 search_param request.query_params.get(search, None) author_id request.query_pa…...
