讨论广场 问答详情
我想给用户展示当前网络质量,比如“差、中、好”。那我在开发时要如何做网络测速并给出简单的质量评分?
小白酷爱学习 2025-09-12 14:39:11
165 评论 分享
鸿蒙应用开发鸿蒙官网

我想给用户展示当前网络质量,比如“差、中、好”。那我在开发时要如何做网络测速并给出简单的质量评分?

相关代码:

async function speedTest() {
  const start = Date.now();
  await http.request('https://example.com/ping');
  const latency = Date.now() - start;
  console.log(latency < 100 ? 'good' : 'poor');
}

 

165 评论 分享
写回答
全部评论(2)
2 楼

这个很简单啊。可以通过以下步骤实现:

  1. 申请网络访问权限
  2. 使用鸿蒙的网络 API 获取当前网络类型
  3. 通过请求特定资源进行简单测速
  4. 根据测速结果给出质量评分
2025-09-13 08:21:11
1 楼

在鸿蒙开发中,可以通过测量网络延迟来判断网络质量(差、中、好)。参考您提供的代码逻辑(基于延迟检测),并结合鸿蒙的 @ohos.net.http 模块实现。以下是详细步骤和代码示例:

实现原理
核心逻辑:
发送一个轻量级 HTTP 请求(如 Ping 测试),测量请求耗时(延迟)。
根据延迟值划分网络质量等级:

好:延迟 < 100ms

中:100ms ≤ 延迟 < 300ms

差:延迟 ≥ 300ms
(阈值可自定义,此处参考您的代码优化为三级评分)

关键模块:
使用鸿蒙的 @ohos.net.http 模块发送 HTTP 请求,通过 Date.now() 计算时间差。

完整代码示例(ARKTS)

    

      

        
TypeScript 

        
   

    

      

        import http from '@ohos.net.http'; // 鸿蒙网络模块
import { BusinessError } from '@ohos.base';

// 网络测速与评分函数
async function speedTest(): Promise<string> {
  const testUrl = 'https://example.com/ping'; // 测试目标,推荐使用低负载服务器
  const startTime = Date.now(); // 记录开始时间

  try {
    // 创建HTTP请求
    const httpRequest = http.createHttp();
    // 发送GET请求(轻量级Ping测试)
    await httpRequest.request(testUrl, {
      method: http.RequestMethod.GET,
      connectTimeout: 5000, // 超时时间设为5秒
    });

    const endTime = Date.now(); // 记录结束时间
    const latency = endTime - startTime; // 计算延迟(ms)

    // 网络质量评分
    if (latency < 100) {
      return '好';
    } else if (latency < 300) {
      return '中';
    } else {
      return '差';
    }
  } catch (error) {
    // 请求失败时直接评为"差"
    console.error('网络请求失败:', (error as BusinessError).message);
    return '差';
  }
}

// 在页面中调用示例
@Entry
@Component
struct NetworkSpeedPage {
  @State networkQuality: string = '检测中...';

  build() {
    Column() {
      Button('开始测速')
        .onClick(async () => {
          this.networkQuality = await speedTest();
        })
      Text('网络质量: ' + this.networkQuality)
        .fontSize(20)
        .margin(10)
    }
  }
}

  

      
    

  
代码说明
延迟测量:

使用 Date.now() 捕获请求前后的时间戳,差值即为延迟。

Ping 测试选择 GET 请求到轻量级 URL(如 https://example.com/ping),减少数据传输影响延迟精度。

错误处理:

添加 try/catch 捕获超时或请求失败,直接返回“差”评级。

设置 connectTimeout: 5000 防止长时间阻塞。

阈值优化:

参考您的代码 (latency < 100 ? 'good' : 'poor'),扩展为三级评分。

实际应用可调整阈值(例如:移动网络下可放宽至 好: <150ms, 中: 150-500ms, 差: >500ms)。

性能建议:

多次测试取平均值(如连续测3次)提升准确性。

使用低负载服务器:避免目标服务器延迟影响结果,建议自建 Ping 服务或选择稳定 CDN。

2025-09-12 18:01:46