跳到主要内容

使用网络领航员进行网络模拟

网络领航员功能简介

网络领航员功能从API version 20开始支持,目前只支持手机和平板。

App上线之前需要优化和验证App在各种网络场景的体验,例如,App针对乘坐地铁时刷短视频进行优化后,卡顿情况是否有所改善,但需要在真实场景下验证。

网络领航员提供了网络模拟的能力,帮助开发者快速验证App在各种典型场景中的使用体验,提升App体验的测试验证效率,降低测试验证成本。例如,不需要真的乘坐高铁去验证高铁场景优化效果。

同时,网络领航员还提供这些网络场景下的数据传输优化建议,App接入华为Network Boost Kit,实现应用和OS跨层协同,提升应用的上网流畅度。

例如,在进出电梯发生WLAN到移动数据切换时,App快速感知网络接口变化,及时将高优先级数据请求调度到新链路,实现WLAN和数据网络切换时不卡顿;在网络变弱时,Network boost kit上报QoS(Quality of Service)状态,帮助App做好传输调度。

预置网络模拟使用简介

网络领航员提供了两种使用入口,分别是设置界面和HDC命令行。

下面介绍通过设置界面使用网络领航员的方法,通过HDC命令行的使用方法见netcopilot工具

当您首次使用该功能时,可根据 开启开发者选项 指引先开启设备的开发者模式,然后点击设置 -> 系统 -> 开发者选项 -> 网络领航员即可进入网络领航员页面。

网络领航员已预置如下常用网络模拟场景,您可以直接使用预置的网络模拟场景快速进行App使用体验测试。

如何启用一个网络模拟场景

可用的网络模拟场景中点击任意一个您需要模拟的场景即可启用网络模拟。例如,点击进出电梯后,即可启用该模拟场景,并可查看已生效的网络模拟场景。

同时您可在设备实况窗中查看到网络模拟内容(以进出电梯为例)。

如何停止一个网络模拟场景

如果您需要停止网络模拟场景,可点击右侧的,然后点击退出该网络模拟场景即可退出模拟。

预置的网络模拟场景使用前置条件及模拟场景阶段说明如下:

网络模拟场景使用前置条件场景介绍及场景阶段说明
进出电梯连接 WLAN 并开启移动网络开关模拟用户进出电梯,WLAN和移动网络间来回切换。此场景共6个阶段,总时长5分钟,循环执行。
离家断开WLAN连接 WLAN 并开启移动网络开关模拟用户从家里到户外,WLAN断开,切换到移动网络。此场景共4个阶段,总时长3分钟,循环执行。
到家连接WLAN连接 WLAN 并开启移动网络开关模拟用户从户外回到室内,连接WLAN,断开移动网络。此场景共3个阶段,总时长3分钟,循环执行。
拥挤的食堂连接 WLAN 或移动网络模拟网络接入设备多,空口竞争大,带宽小,时延大。此场景共3个阶段,总时长5分钟,循环执行。
停车场连接 WLAN 或移动网络模拟网络覆盖不佳,信号弱,带宽小,时延大。此场景共3个阶段,总时长5分钟,循环执行。
乘坐地铁连接 WLAN 或移动网络模拟网络波动大,站台上的网络强,站台间的网络弱。此场景共5个阶段,总时长5分钟,循环执行。
乘坐高铁插入双SIM卡并开启移动网络开关模拟网络波动大,频繁切换基站,间歇出现不可用。此场景共5个阶段,总时长10分钟,循环执行。
高速公路自驾连接 WLAN 或移动网络模拟网络波动大,城区网络强,隧道区域网络弱。此场景共5个阶段,总时长5分钟,循环执行。

预置的网络模拟场景包含的具体阶段及网络情况详见附录

自定义网络模拟场景配置

当上述预置网络模拟场景无法满足您的开发需要时,您也可以在网络领航员页面通过点击底部的 添加自定义网络场景 来新增所需网络配置。

参数的取值范围参考如下,输入参数取值后会自动添加单位。自定义场景的参数配置将应用于启动时的默认网络,建议在网络环境稳定时使用。

参数选项参数取值范围单位
上行带宽100 - 500000Kbps
下行带宽100 - 2000000Kbps
上行丢包率0.0 - 20.0%
下行丢包率0.0 - 20.0%
上行延迟1 - 1000ms
下行延迟1 - 1000ms

自定义场景暂未接入Network Boost Kit,若开发者想模拟网络场景的注册回调,可使用预置的网络模拟场景

网络优化建议

当您使用网络领航员能力时,可以通过实况窗实时了解网络变化,同时您也可以点击实况窗查看该场景的详细介绍,点击蓝色字体可查看详细的网络参数网络开发代码开发最佳实践

网络领航员代码优化建议

"网络领航员"功能在激活指定场景时,可智能模拟该场景下的网络QoS(服务质量)变化,帮助开发者快速构建目标网络环境。通过此功能,开发者能够前瞻性发现应用在不同网络环境中的兼容性问题,并基于本节的最佳实践指南进行针对性优化。

代码优化建议

当前支持8大类典型场景模拟(详见"附录"章节),其网络特征可归纳为三类:网络切换、网络波动、网络质量差。如下为对应场景特征及代码开发建议。

网络切换场景

  • 特征:设备在网络制式间切换(如WLAN与蜂窝网络互切)或多SIM卡切换时,会导致IP地址变更、TCP连接强制中断(触发RST复位),并伴随DNS重解析和新连接握手延迟。

  • 典型场景:进出电梯、离家断开WLAN、高铁行驶(多SIM卡切换)

  • 最佳实践:应用需及时识别网络切换并重建连接,解析DNS,重新发起未完成的请求,也可直接使用Network Kit的HTTP数据请求模块发起网络请求。Network Kit集成了通途协议栈的智能多网切换功能,能够在网络切换时自动将待发和进行中的请求切换至已激活的网络,有效避免网络切换环境下请求失败或业务响应延迟的问题。Network Kit HTTP请求示例代码如下:

    // 引入包名
    import { http } from '@kit.NetworkKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    // 每一个httpRequest对应一个HTTP请求任务,不可复用
    let httpRequest = http.createHttp();
    httpRequest.request(
    // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
    "EXAMPLE_URL", (err: BusinessError, data: http.HttpResponse) => {
    if (!err) {
    // data.result为HTTP响应内容,可根据业务需要进行解析
    console.info('Result:' + JSON.stringify(data.result));
    // 当该请求使用完毕时,调用destroy方法主动销毁
    httpRequest.destroy();
    } else {
    console.error('error:' + JSON.stringify(err));
    // 当该请求使用完毕时,调用destroy方法主动销毁
    httpRequest.destroy();
    }
    }
    );

    网络波动场景

    • 特征:因信号强度快速变化(如移动穿行或高速运动),网络表现为带宽骤降(50Mbps→1Mbps)、时延剧烈抖动(RTT波动超300%)、短时丢包(0%~5%)。
    • 典型场景:乘坐地铁、高速公路自驾。
    • 最佳实践:
    1. 订阅Network Boost Kit的netQuality事件,实时感知网络质量,并进行针对性处理。

      // 引入包名
      import { netQuality } from '@kit.NetworkBoostKit';
      import { BusinessError } from '@kit.BasicServicesKit';
      try {
      netQuality.on('netQosChange', (list: Array<netQuality.NetworkQos>) => {
      if (list.length > 0) {
      list.forEach((qos) => {
      // 回调信息处理
      console.info(`该数据链路类型的上行带宽: ${JSON.stringify(qos.linkUpBandwidth)}.` );
      console.info(`该数据链路类型的下行带宽: ${JSON.stringify(qos.linkDownBandwidth)}.` );
      // 应用可根据上下行带宽等信息实时感知网络质量,调整请求策略
      });
      }
      });
      } catch (err) {
      console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
      }
    2. 在网络质量好时进行请求预取,提前发送后续可能产生的请求,并缓存获取的资源。后续产生对应请求时直接加载缓存的资源,提高响应速度,避免卡顿。

      // 引入包名
      import { rcp } from '@kit.RemoteCommunicationKit';
      import { HashMap } from "@kit.ArkTS";
      export class PrefetchingRcp {
      private session = rcp.createSession();
      private responsePrefetched: HashMap<string, rcp.Response> = new HashMap<string, rcp.Response>();
      public async prefetch(url: string) {
      const request = new rcp.Request(url);
      try {
      // 发送预取请求
      let response: rcp.Response = await this.session.fetch(request);
      // 缓存预取结果
      this.responsePrefetched.set(url, response);
      return Promise.resolve();
      } catch (reason) {
      console.error(`Rcp prefetch failed: ${reason.code}`);
      return Promise.reject();
      }
      }
      }
    3. 在网络质量差时降低请求频率/请求数据量,避免加剧网络拥塞。

网络质量差场景

  • 特征:在信号屏蔽区(如地下停车场)或高密度接入环境(如拥挤食堂),网络呈现持续低带宽(<1Mbps)、高延迟(>100ms)和高丢包率。

  • 典型场景:拥挤的食堂、停车场。

  • 最佳实践:在拥塞场景及时降低请求频率、请求数据量等,网络恢复时恢复请求。除通过netQosChange判断网络质量外,还可通过订阅网络场景识别事件,直接检测网络拥塞或网络信号差。检测到时及时减少请求,避免反复请求加剧网络拥塞。示例代码如下:

    // 引入包名
    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.scene == 'normal') {
    // 检测到网络不再拥塞,应用处理
    }
    if (sceneInfo.weakSignalPrediction) {
    // 弱信号场景预测,感知到网络质量即将变差,应用提前应对
    }
    });
    }
    });
    } catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
    }

信息收集说明

当您使用网络领航员能力时,App的使用记录会被收集,并可能会通过您的华为账号对应的联系方式与您进行取得联系进行使用回访,以便我们进一步优化提升该能力。

当您使用该能力时,以下数据会被收集,请悉知:

  • 您使用网络领航员时需要先关联您的华为账号,且当您选择打开关联体验改进计划的开关时,则默认表示同意上传使用日志;
  • 您使用该能力时的App对应的bundle name以及版本号;
  • 您使用该能力时的App使用的网络模拟场景以及对应的时间。

附录

不同网络场景的QoS情况

进出电梯

该场景一共5分钟,循环执行。

子阶段持续时间(分:秒)网络接口下行带宽下行带宽分布上行带宽上行带宽分布时延时延分布丢包丢包分布
等待电梯0-30sWLAN60-140Mbpsrandom30-60Mbpsrandom0-20msrandom0.00%-0.01%random
进入电梯30-90sWLAN90-50MbpslinearDecrease30-8MbpslinearDecrease2-20mslinearIncrease0.00%-0.21%random
电梯关门90-100sWLAN1-0Mbpsrandom1-0Mbpsrandom0-200msrandom0.00%-0.00%random
电梯关门100-110sWLAN1-0MbpslinearDecrease1-0MbpslinearDecrease200-1000mslinearIncrease0.00%-8.00%linearIncrease
电梯关门110-120s蜂窝20-50Mbpsrandom5-15Mbpsrandom0-20msrandom0.00%-0.20%random
电梯上行120-180s蜂窝20-50Mbpsrandom5-15Mbpsrandom0-30msrandom0.01%-0.20%random
电梯开门180-210s蜂窝30-100MbpslinearIncrease15-50MbpslinearIncrease30-0mslinearDecrease0.01%-0.10%random
走出电梯210-240s蜂窝100-300MbpslinearIncrease50-100MbpslinearIncrease0-10msrandom0.00%-0.01%random
走出电梯240-300sWLAN60-140Mbpsrandom30-60Mbpsrandom10-20msrandom0.00%-0.01%random

离家断开WLAN

该场景一共3分钟,循环执行。

子阶段持续时间(分:秒)网络接口下行带宽下行带宽分布上行带宽上行带宽分布时延时延分布丢包丢包分布
在家中0-60sWLAN60-140Mbpsrandom30-60Mbpsrandom0-15msrandom0.00%-0.00%random
在门口60-90sWLAN100-50MbpslinearDecrease40-10MbpslinearDecrease5-15mslinearIncrease0.00%-0.00%random
越走越远90-110sWLAN5-0Mbpsrandom5-0Mbpsrandom0-200msrandom0.00%-0.00%random
越走越远110-120sWLAN5-0MbpslinearDecrease5-0MbpslinearDecrease200-1000mslinearIncrease0.00%-8.00%linearIncrease
越走越远120-150s蜂窝200-400Mbpsrandom30-70Mbpsrandom0-35msrandom0.00%-0.00%random
在路上150-180s蜂窝300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random

到家连接WLAN

该场景一共3分钟,循环执行。

子阶段持续时间(分:秒)网络接口下行带宽下行带宽分布上行带宽上行带宽分布时延时延分布丢包丢包分布
在走廊0-60s蜂窝300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random
在门口60-90s蜂窝200-400Mbpsrandom30-70Mbpsrandom0-35msrandom0.00%-0.00%random
在门口90-120sWLAN30-50Mbpsrandom10-30Mbpsrandom10-40msrandom0.00%-0.00%random
进入家中120-180sWLAN60-140Mbpsrandom30-60Mbpsrandom0-20msrandom0.00%-0.00%random

拥挤的食堂

该场景一共5分钟,循环执行。

子阶段持续时间(分:秒)网络接口下行带宽下行带宽分布上行带宽上行带宽分布时延时延分布丢包丢包分布
进入食堂0-60sWLAN60-140Mbpsrandom30-60Mbpsrandom0-20msrandom0.00%-0.00%random
排队取餐60-120sWLAN0-5Mbpsrandom0-5Mbpsrandom10-100msrandom0.00%-2.4%random
就坐用餐120-240sWLAN15-60Mbpsrandom10-20Mbpsrandom0-55msrandom0.00%-0.2%random
离开食堂240-300sWLAN60-140Mbpsrandom30-60Mbpsrandom0-20msrandom0.00%-0.00%random

信号弱的地库

该场景一共5分钟,循环执行。

子阶段持续时间(分:秒)网络接口下行带宽下行带宽分布上行带宽上行带宽分布时延时延分布丢包丢包分布
前往停车场0-60s蜂窝300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random
在停车场中60-240s蜂窝0-10Mbpsrandom0-10Mbpsrandom30-100msrandom0.00%-0.50%random
走出停车场240-300s蜂窝300-500Mbpsrandom50-100Mbpsrandom0-35msrandom0.00%-0.00%random

乘坐地铁

该场景一共5分钟,循环执行。

子阶段持续时间(分:秒)网络接口下行带宽下行带宽分布上行带宽上行带宽分布时延时延分布丢包丢包分布
地铁站台候车0-30s蜂窝300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random
列车行驶30-150s蜂窝0-10Mbpsrandom0-10Mbpsrandom0-35msrandom0.00%-0.50%random
列车到站150-180s蜂窝300-500Mbpsrandom50-100Mbpsrandom0-35msrandom0.00%-0.00%random
列车行驶180-270s蜂窝0-10Mbpsrandom0-10Mbpsrandom0-35msrandom0.00%-0.50%random
列车到站270-300s蜂窝300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random

乘坐高铁

该场景一共10分钟,循环执行。

子阶段持续时间(分:秒)网络接口下行带宽下行带宽分布上行带宽上行带宽分布时延时延分布丢包丢包分布
高铁站台候车0-60s蜂窝(卡1)300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random
列车在市郊行驶60-120s蜂窝(卡1)100-250Mbpsrandom20-50Mbpsrandom0-35msrandom0.00%-0.50%random
列车在山区行驶120-240s蜂窝(卡1)0-8Mbpsrandom0-8Mbpsrandom300-2000msrandom0.00%-5.00%random
列车在山区行驶240-360s蜂窝(卡2)30-50Mbpsrandom10-30Mbpsrandom300-2000msrandom0.00%-5.00%random
列车在市郊到站360-480s蜂窝(卡1)200-400Mbpsrandom30-70Mbpsrandom0-35msrandom0.00%-0.50%random
下车出站480-600s蜂窝(卡1)300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random

高速公路自驾

该场景一共5分钟,循环执行。

子阶段持续时间网络接口下行带宽下行带宽分布上行带宽上行带宽分布时延时延分布丢包丢包分布
汽车在市区行驶0-60S蜂窝300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random
汽车进出隧道60-120s蜂窝0-2Mbpsrandom0-2Mbpsrandom300-2000msrandom0.00%-5.00%random
汽车在市区行驶120-180s蜂窝300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random
汽车在高架行驶180-240s蜂窝0-10Mbpsrandom0-10Mbpsrandom0-35msrandom0.00%-0.00%random
汽车在市区行驶240-300s蜂窝300-500Mbpsrandom50-100Mbpsrandom0-25msrandom0.00%-0.00%random