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.pswp.cn/diannao/76397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76397.shtml
英文地址,請注明出處:http://en.pswp.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/…