鸿蒙网络管理模块07——网络质量管理

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。

1、概述

HarmonyOS提供了一套网络网络质量管理的套件(Network Boost Kit),它可以实现网络加速、网络感知、网络质量预测等能力,通过软、硬、芯、端、管、云等全方位的协同解决方案实现网络资源的调优和加速,构筑更可靠、更流畅、更高速的上网体验。

在使用相关API时,需要申请设备网络信息权限:ohos.permission.GET_NETWORK_INFO。需要在entry/src/main路径下的module.json5中配置所需申请的权限。示例代码如下所示:

{  "module": {    "requestPermissions": [      {        "name": "ohos.permission.GET_NETWORK_INFO"      }    ]  }}

2、网络质量状况评估

我们可以通过订阅网络质量Qos评估来实现监听网络质量问题,系统按照一定的周期或Qos变化后回调给应用。回调的Qos信息包括数据传输的链路类型、上下行空口实时带宽、上下行空口实时速率、RTT时延等。接口定义如下:​​​​​​​

// 订阅Qos信息状态变化on(type: 'netQosChange', callback: Callback<Array<NetworkQos>>): void// 取消订阅Qos信息状态变化off(type: 'netQosChange', callback?: Callback<Array<NetworkQos>>): void

其中NetWorkQos对象是系统返回的网络质量信息。相关结构定义如下:​​​​​​​

class NetworkQos {pathType: PathType // 相应的数据路径上的网络质量信息。linkUpBandwidth: RateBps // 上行带宽信息。linkDownBandwidth: RateBps // 下行带宽信息。linkUpRate: RateBps // 上行速率。linkDownRate: RateBps // 下行速率。rttMs: number // RTT时延,取值范围是任意正数。linkUpBufferDelayMs: number //上行发送空口缓冲时延,取值范围是任意正数。linkUpBufferCongestionPercent: number // 上行发送空口缓冲时延占总缓冲时间的比例,取值范围[0, 100]。}enum PathType {CELLULAR_PRIMARY = 0 // 蜂窝主卡。CELLULAR_SECONDARY = 1 // 蜂窝副卡。WIFI_PRIMARY = 2 // 主WiFi。WIFI_SECONDARY = 3 // 辅WiFi。}type RateBps = number // 带宽或速率的抽象表示。

示例代码如下:​​​​​​​

// 导入NetWork Boost Kit模块import { netQuality } from '@kit.NetworkBoostKit';import { BusinessError } from '@kit.BasicServicesKit';// 订阅获取系统Qos信息// .....try {  netQuality.on('netQosChange', (list: Array<netQuality.NetworkQos>) => {    if (list.length > 0) {      list.forEach((qos) => {        // 回调信息处理      });    }  });} catch (err) {  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}// ...// 取消订阅Qos信息// ... try {  netQuality.off('netQosChange'); } catch (err) {  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}// ...

3、网络场景识别

应用在订阅网络场景识别后,系统在网络场景实时信息或预测信息发生变化后回调给应用,回调的网络场景信息包括数据传输的链路类型、网络场景类型、数传策略建议、弱信号信息等。接口定义如下:​​​​​​​

// 订阅网络场景信息状态变化。on(type: 'netSceneChange', callback: Callback<Array<NetworkScene>>): void// 取消订阅网络场景信息状态变化。off(type: 'netSceneChange', callback?: Callback<Array<NetworkScene>>): void

其中,NetworkScene相关结构如下:​​​​​​​

class NetworkScene {pathType: PathType // 表明相应的数据路径上的网络场景信息。scene: Scene // 场景状态。recommendedAction: RecommendedAction // 建议的数传策略。weakSignalPrediction: WeakSignalPrediction // 弱信号预测相关信息。}enum PathType {CELLULAR_PRIMARY = 0 // 蜂窝主卡。CELLULAR_SECONDARY = 1 // 蜂窝副卡。WIFI_PRIMARY = 2 // 主WiFi。WIFI_SECONDARY = 3 // 辅WiFi。}/* 场景类型'normal':表示正常场景。'congestion':表示拥塞场景。'frequentHandover':表示小区切换频繁场景。'weakSignal':表示弱信号场景。*/type Scene = 'normal' | 'congestion' | 'frequentHandover' | 'weakSignal'/* 应用数传策略建议。'doCaching':表示做缓存动作。'suspendData':表示停止发包。'decreaseData':表示降低发包速率。'increaseData':表示增加发包速率。'keepData':表示保持当前发包速率。*/type RecommendedAction = 'doCaching' | 'suspendData' | 'decreaseData' | 'increaseData' | 'keepData';class WeakSignalPrediction { // 弱信号预测相关信息。isLastPredictionValid: boolean // 最近一次的弱信号预测是否有效,true表示最近一次的弱信号预测依旧有效,false表示最近一次的弱信号预测失效,此时startTime和duration参数忽略。startTime: number // 预计多长时间进入弱信号(单位:秒),取值范围为0和任意正数。duration: number //预计在弱信号区域停留时长(单位:秒),取任意正数。取值0,此次预测结果无效。}

示例代码如下:​​​​​​​

// 导入相关模块import { netQuality } from '@kit.NetworkBoostKit';import { BusinessError } from '@kit.BasicServicesKit';// 订阅网络场景识别信息// ... try {  netQuality.on('netSceneChange', (list: Array<netQuality.NetworkScene>) => {    if (list.length > 0) {      list.forEach((sceneInfo) => {        // 网络场景识别回调信息处理        if (sceneInfo.scene == 'congestion') {          // 网络拥塞分支处理        }        if (sceneInfo.weakSignalPrediction) {          // 存在弱信号预测信息,对弱信号预测信息进行处理        }      });    }  });} catch (err) {  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}// ...// 取消订阅网络识别信息// ...try {  netQuality.off('netSceneChange'); } catch (err) {  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}// ...

4、应用传输体验反馈

当应用传输体验发生变化时,应用将传输体验和传输的业务类型信息通过实时反馈接口传输给系统网络业务模块,系统网络业务模块进行精细化调度,实现网络加速。

例如:视频类App播放过程中卡顿,将卡顿信息上报后,Network Boost Kit将信息反馈给系统网络加速模块,该模块会记录播放卡顿信息,并根据当前网络情况,启用网络加速能力。

接口定义如下:​​​​​​​

// 应用反馈传输体验信息reportQoe(appQoe: AppQoe): void

其中AppQoe对象定义如下:​​​​​​​

class AppQoe {serviceType: ServiceType // 应用的业务类型。qoeType: QoeType // 应用体验类型。/*应用业务类型。'default':表示默认服务类型。'background':表示后台类型。'realtimeVoice':表示实时语音类型。'realtimeVideo':表示实时视频类型。'callSignaling':表示语音信令类型。'realtimeGame':表示实时游戏类型。'normalGame':表示普通游戏类型。'shortVideo':表示短视频类型。'longVideo':表示长视频类型。'livestreamingAnchor':表示直播主播类型。'livestreamingWatcher':表示直播观看类型。'download':表示下载类型'upload':表示上传类型。'browser':表示浏览页面类型。*/type ServiceType = 'default' | 'background' | 'realtimeVoice' | 'realtimeVideo' | 'callSignaling' | 'realtimeGame' | 'normalGame' | 'shortVideo' | 'longVideo' | 'livestreamingAnchor' | 'livestreamingWatcher' | 'download' | 'upload' | 'browser';/* 应用体验类型'good' :表示体验良好。'unknown':表示未知原因。'serverErr':表示服务器异常。'noData':表示无数据。'packetLost':表示丢包。'packetOutOfOrder':表示乱序。'highJitter':表示高抖动。'highLatency':表示高时延。*/type QoeType = 'good' | 'unknown' | 'serverErr' | 'noData' | 'packetLost' | 'packetOutOfOrder' | 'highJitter' | 'highLatency';

示例代码如下:​​​​​​​

// 导入相关模块import { netQuality } from '@kit.NetworkBoostKit';import { BusinessError } from '@kit.BasicServicesKit';// 调用reportQoe接口将应用传输体验信息通知给系统侧。// ...try{  let serviceType: netQuality.ServiceType = 'shortVideo';  let qoeType: netQuality.BadQoeCause = 'serverErr';  let appQoE: netQuality.AppQoe = {    serviceType,    qoeType  };  netQuality.reportQoe(appQoE);} catch (err) {  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}// ...

❓  弱网感知如何判决?

弱网感知判决可归纳为3种方式获取:

👉🏻 方法1(监听系统实时判决):

根据网络场景识别信息,如NetworkScene.scene(weakSignal/congestion)系统直接判决为弱网。

👉🏻 方法2(监听系统预测判决):

根据网络场景识别中的弱信号预测信息,

如NetworkScene.weakSignalPrediction系统预测即将进入弱网区域。

👉🏻 方法3(应用自定义判决):

根据网络质量评估信息,如

NetworkQos(linkUpBandwidth/linkDownBandwidth/rttMs/linkUpBufferDelayMs/linkUpBufferCongestionPercent),应用自定义门限来判决为弱网。

我们可根据自身业务特点,选择其中一种或多种使用。

5、连接迁移

在弱网环境下,系统发起多网迁移(WiFi<->蜂窝,主卡<->副卡等)的过程中,给应用提供连接迁移开始和完成通知,应用根据连接迁移通知的建议进行重建,快速恢复业务,给用户带来平滑、高速、低时延的上网体验。接口定义如下:​​​​​​​

// 订阅连接迁移on(type: 'handoverChange', callback: Callback<HandoverInfo>): void// 取消订阅连接迁移off(type: 'handoverChange', callback?: Callback<HandoverInfo>): void

其中HandoverInfo定义如下:​​​​​​​

class HandoverInfo {handoverStart: HandoverStart //表示连接迁移开始信息。handoverComplete: HandoverComplete // 表示连接迁移完成信息。}class HandoverStart {expires: number // 连接迁移全流程的超时时间,单位为秒,取值为任意正整数或者0。dataSpeedAction: DataSpeedAction // 老链路的发包建议。}class DataSpeedAction {dataSpeedSimpleAction: DataSpeedSimpleAction // 应用发包策略的简单建议。linkUpBandwidth: RateBps // 老链路上行带宽。linkDownBandwidth: RateBps // 老链路下行带宽。}type DataSpeedSimpleAction = 'suspendData' | 'decreaseData' | 'increaseData' | 'keepData';class HandoverComplete {result: ErrorResult // 连接迁移结果。/*true表示还有新链路待激活,系统还会上报HandoverComplete消息,一般发生在连接迁移到多个网络的场景。false表示当前已经是最后一个HandoverComplete消息,连接迁移流程完成。*/handoverContinue: boolean // 是否还有HandoverComplete消息。oldPathLifeTime: number // 老链路的剩余生存时长,单位为秒,取值为任意正整数或0。oldDataSpeedAction: DataSpeedAction // 老链路发包建议。pathTypeChanged: boolean // 新老链路类型是否发生变更。true表示发生变化,如WiFi<->蜂窝。false表示没有发生变化。newNetHandle: NetHandle // 新链路的NetHandle信息。reEstAction: ReEstAction // 链路重建类型。newDataSpeedAction: DataSpeedAction // 新链路发包建议。}

示例代码如下:​​​​​​​

// 导入相关模块import { netHandover } from '@kit.NetworkBoostKit';import { BusinessError } from '@kit.BasicServicesKit';// 订阅迁移信息// ...try {  netHandover.on('handoverChange', (info: netHandover.HandoverInfo) => {    if (info.handoverStart) {      // 连接迁移开始回调,应用按照HandoverStart的建议调整数传策略      console.info('handover start');    } else if (info.handoverComplete) {      // 连接迁移完成回调,应用按照HandoverComplete的建议进行调速和重建恢复      console.info('handover complete');    }  });} catch (err) {  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}// ...// 取消订阅连接迁移// ...try {  netHandover.off('handoverChange');} catch (err) {  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}// ...

6、迁移模式设置

应用可通过该接口变更连接迁移模式,包括委托模式由系统发起连接迁移,和自主模式由应用发起连接迁移。接口定义如下:​​​​​​​

// 应用设置迁移模式,默认为委托模式。setHandoverMode(mode: HandoverMode): void

其中HandoverMode是一个枚举,定义如下:​​​​​​​

enum HandoverMode {DELEGATION = 0 // 委托模式,表示由系统发起连接迁移。应用未调用setHandoverMode接口则默认为该模式。DISCRETION = 1 // 自主模式,表示由应用发起连接迁移。应用可以通过该接口禁止系统发起连接迁移。在某些场景下,比如该应用切换到后台时,依旧有可能由系统触发切换。}

示例代码如下:​​​​​​​

// 导入相关模块import { netHandover} from '@kit.NetworkBoostKit';import { BusinessError } from '@kit.BasicServicesKit';// 调用setHandoverMode接口,设置为自主模式,禁止系统发起连接迁移// ...try{  let mode: netHandover.HandoverMode = netHandover.HandoverMode.DISCRETION;  netHandover.setHandoverMode(mode);} catch (err) {  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}// ...

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

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

相关文章

[论文笔记]DAPR: A Benchmark on Document-Aware Passage Retrieval

引言 今天带来论文DAPR: A Benchmark on Document-Aware Passage Retrieval的笔记。 本文提出了一个基准&#xff1a;文档感知段落检索(Document-Aware Passage Retrieval,DAPR)以及介绍了一些上下文段落表示的方法。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c…

麒麟信安CentOS安全加固案例获评中国信通院第三届“鼎新杯”数字化转型应用奖

“鼎新杯”数字化转型应用大赛&#xff0c;由中国通信标准化协会主办、中国信息通信研究院承办&#xff0c;以落实国家“十四五”规划关于“加快数字化发展&#xff0c;建设数字中国”的总体要求为目标&#xff0c;意在打造一批具有产业引领与推广应用效应的企业数字化转型应用…

OCR+PDF解析配套前端工具开源详解!

目录 一、项目简介 TextIn为相关领域的前端开发提供了优秀的范本。 目前项目已在Github上开源&#xff01; 二、性能特色 三、安装使用 安装依赖启动项目脚本命令项目结构 四、效果展示 面对日常生活和工作中常见的OCR识别、PDF解析、翻译、校对等场景&#xff0c;配套的…

【C++进阶】set的使用

1. 序列式容器和关联式容器 前面&#xff0c;我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间⼀般没有紧…

dvwa:暴力破解、命令注入、csrf全难度详解

暴力破解 easy模式 hydra -L /usr/share/wordlists/SecLists-master/Usernames/top-usernames-shortlist.txt -P /usr/share/wordlists/SecLists-master/Passwords/500-worst-passwords.txt 192.168.72.1 http-get-form "/dvwa/vulnerabilities/brute/:username^USER^&…

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS&#xff08;鸿蒙系统&#xff09;&#xff0c;uni-app 提供了特定的支持&#xff0c;允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…

UE5 C++ 通过绑定编辑器事件实现控制柄顶点编辑

开发中经常会遇到编辑器环境中制作工具拖拽控制柄编辑内容的需求&#xff0c;此时可以通过Editor事件拿到对应回调&#xff0c;进行相应更新&#xff1a; 1.创建Mesh编辑Actor类 创建一个Mesh编辑Actor类&#xff0c;提供Mesh顶点编辑的相关逻辑。 .h: #pragma once#inclu…

Mac上强大的菜单栏管理工具

想要Mac用的好&#xff0c;各种工具少不了&#xff0c;一款好用的软件对于提高使用效率和使用舒适度来说非常必要&#xff0c;iBar-强大的菜单栏图标管理工具 随着 Mac 运行的软件增加&#xff0c;状态栏中的图标也越来越多&#xff0c;不仅看得眼花缭乱&#xff0c;而且刘海屏…

Fetch 与 Axios:JavaScript HTTP 请求库的详细比较

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

基于SpringBoot民宿预订系统小程序【附源码】

效果如下&#xff1a; 管理员登录界面 管理员功能界面 用户管理界面 房东管理界面 小程序首页界面 民宿房间界面 功能界面 研究背景 随着旅游业的蓬勃发展和人们对旅行体验的不断追求&#xff0c;民宿作为一种独特的住宿方式&#xff0c;因其个性化、温馨及富含地方特色的服务…

机器学习中的模型设计与训练流程详解

目录 前言1. 模型设计1.1 数据特性分析1.2 计算资源限制1.3 应用场景需求 2. 模型训练2.1 训练集与验证集的划分2.2 损失函数的选择2.3 模型参数更新 3. 优化方法3.1 梯度下降法3.2 正则化方法 4. 模型测试4.1 性能评估指标4.2 模型的泛化能力 5. 模型选择5.1 数据规模与模型复…

matlab不小心删除怎么撤回

预设项——>删除文件——>移动至临时文件夹 tem临时文件夹下

鸿蒙开发之ArkUI 界面篇 三十五 容器组件Tabs 切换高亮

好多app都有切换点中的时候高亮效果&#xff0c;如下图所示&#xff1a; 改变的是什么呢&#xff1f;是字体的颜色、背景图&#xff0c;不是切换到的界面&#xff0c;又恢复到默认的图片和字体颜色&#xff0c;而鸿蒙中更新界面的值需要使用State修饰&#xff0c;Tabs提供了onC…

Linux环境通过APT 仓库安装版PostgreSQL 数据库实战

Linux环境通过APT 仓库安装版PostgreSQL 数据库是运维人员常见的需求之一&#xff0c;今天我们一步一步演示一下&#xff1a; 1、添加 PostgreSQL APT 仓库 确保你的系统更新&#xff0c;然后添加 PostgreSQL 的官方 APT 仓库。 sudo apt update sudo apt install -y wget w…

【动手学深度学习】6.4 多输入多输出通道

彩色图像具有标准的RBG通道来代表红绿蓝&#xff0c;但是到目前位置我们仅展示了单个输入和单个通道的简化例子。这使得我们可以将输入&#xff0c;卷积核和输出看作二维张量而当我们添加通道时&#xff0c;输入和隐藏表示都变成了三维张量。例如每个RGB输入图像都具有 3 h …

QD1-P5 HTML 段落标签(p)换行标签(br)

本节视频 www.bilibili.com/video/BV1n64y1U7oj?p5 ‍ 本节学习 HTML 标签&#xff1a; p标签 段落br标签 换行 ‍ 一、p 标签-段落 1.1 使用 p 标签划分段落 <p>段落文本</p>示例 <!DOCTYPE html> <html><head><meta charset"…

Windows11系统下Sentinel环境搭建教程

目录 前言Sentinel简介Sentinel下载安装Sentinel配置与启动总结 前言 本文为博主在项目环境搭建时记录的Sentinel安装流程&#xff0c;希望对大家能够有所帮助&#xff0c;不足之处欢迎批评指正&#x1f91d;&#x1f91d;&#x1f91d; Sentinel简介 github主页地址 &#x…

电脑查不到IP地址是什么原因?怎么解决

在日常使用电脑的过程中&#xff0c;有时会遇到无法查询到电脑IP地址的情况&#xff0c;这可能会影响到网络的正常使用。本文将探讨电脑查不到IP地址的可能原因&#xff0c;并提供相应的解决方案。 一、原因分析 ‌网络连接问题‌&#xff1a;首先&#xff0c;网络连接不稳定或…

服务器数据恢复—EMC存储RAID5磁盘阵列数据恢复案例

服务器数据恢复环境&#xff1a; 一台EMC某型号存储设备&#xff0c;该存储中有一组由12块&#xff08;包括2块热备盘&#xff09;STAT硬盘组建的raid5阵列。 服务器故障&#xff1a; 该存储在运行过程中突然崩溃&#xff0c;raid瘫痪。数据恢复工程师到达现场对故障存储设备进…

点云数据与多相机图像融合实现3D场景的彩色可视化

引言 在现代3D计算机视觉和机器人感知领域&#xff0c;点云数据和图像信息的融合正变得越来越重要。点云数据提供了精确的几何结构&#xff0c;而图像则包含了丰富的颜色和纹理细节。将这两种数据源结合起来&#xff0c;我们能够创建更加逼真和信息丰富的3D场景表示。本文将深…