开发者工具箱-鸿蒙网络测速工具开发笔记

2025-06-04 13:15:44
148次阅读
0个评论

鸿蒙网络测速工具开发笔记

前言

最近在做鸿蒙开发者工具箱,需要加个网络测速功能。这个功能主要是用来测网速的,包括下载速度、上传速度还有网络延迟。实际开发时发现鸿蒙对网络测速的支持不太完善,得自己写测速逻辑。调试了好几次,总算搞出来一个能用的版本

一、功能说明

1.1 主要功能

  • 测下载速度
  • 测上传速度
  • 测网络延迟
  • 可以自己设置测速节点
  • 自动换算单位(Kbps/Mbps/Gbps)

1.2 界面功能

  • 实时显示速度
  • 显示测试进度
  • 可以设置自定义服务器
  • 支持收藏
  • 有使用说明

二、实现过程

2.1 测速原理

测速的基本思路就是下载和上传文件来测试网速。在鸿蒙里,我们主要用 HTTP 请求来实现:

  1. 下载测速

    • 从服务器下载个测试文件(我用的10MB)
    • 记下开始时间
    • 下载过程中实时算已下载的数据量
    • 速度 = 数据量/时间
    • 多测几次取平均值,这样准一点
  2. 上传测速

    • 生成个测试数据(也是10MB)
    • 记下开始时间
    • 实时算已上传的数据量
    • 速度 = 数据量/时间
    • 同样多测几次
  3. 延迟测试

    • 发个 HTTP HEAD 请求
    • 记下发送时间
    • 记下收到响应的时间
    • 延迟 = 响应时间 - 发送时间
    • 测几次取最小值
  4. 单位换算

    • 1 Mbps = 1024 Kbps
    • 1 Gbps = 1024 Mbps
    • 根据速度大小自动选合适的单位
  5. 服务器选择

    • 维护个服务器列表
    • 测每个服务器的延迟
    • 选延迟最低的
    • 也可以自己设置服务器

2.2 代码实现

@Entry
@Component
struct SpeedTest {
  @State downloadSpeed: number = 0;      // 下载速度
  @State uploadSpeed: number = 0;        // 上传速度
  @State isTesting: boolean = false;     // 是否在测试
  @State currentTest: string = '';       // 当前测试类型
  @State progress: number = 0;           // 进度
  @State testServer: string = '';        // 测试服务器
  @State ping: number = 0;               // 延迟

  // 开始测试
  private async startTest(): Promise<void> {
    try {
      this.resetState();
      this.isTesting = true;
      this.startProgressAnimation();

      // 选服务器
      this.currentTest = '正在选择服务器...';
      this.testServer = await NetworkService.selectSpeedTestServer();
      
      // 测延迟
      this.currentTest = '正在测延迟...';
      this.ping = await NetworkService.testPing(this.testServer);

      // 测下载
      this.currentTest = '正在测下载速度...';
      this.downloadSpeed = await NetworkService.testDownloadSpeed(
        this.testServer,
        (progress) => {
          this.progress = progress;
        }
      );

      // 测上传
      this.currentTest = '正在测上传速度...';
      this.uploadSpeed = await NetworkService.testUploadSpeed(
        this.testServer,
        (progress) => {
          this.progress = progress;
        }
      );

      this.currentTest = '测完了';
    } catch (error) {
      this.isError = true;
      this.currentTest = '测试失败';
    } finally {
      this.isTesting = false;
      this.stopProgressAnimation();
    }
  }

  // 格式化速度显示
  private formatSpeedValue(speed: number): string {
    if (speed === 0) return '0';
    if (speed >= 1000) return (speed / 1000).toFixed(1);
    if (speed >= 1) return speed.toFixed(1);
    return (speed * 1000).toFixed(0);
  }

  private formatSpeedUnit(speed: number): string {
    if (speed >= 1000) return 'Gbps';
    if (speed >= 1) return 'Mbps';
    return 'Kbps';
  }
}

三、踩坑记录

3.1 遇到的问题

  1. 测速不准

    • 问题:测出来的速度波动太大
    • 解决:多测几次取平均值
  2. 服务器问题

    • 问题:不同服务器测出来差很多
    • 解决:自动选最好的服务器
  3. 进度显示

    • 问题:进度更新不及时
    • 解决:加了动画效果
  4. 内存问题

    • 问题:内存占用太大
    • 解决:及时释放资源

3.2 优化建议

  1. 测速优化

    • 多测几次
    • 调整测试文件大小
    • 支持断点续传
  2. 性能优化

    • 优化UI
    • 减少内存占用
    • 及时释放资源
  3. 用户体验

    • 加个测试历史
    • 支持分享结果
    • 优化动画效果
  4. 安全性

    • 验证服务器地址
    • 限制测试频率
    • 保护用户隐私

四、总结

这个测速工具基本功能都有了,可以:

  • 测网速
  • 查网络问题
  • 优化网络设置
  • 评估网络质量

五、参考资料

欢迎体验

这个测速工具已经集成到鸿蒙开发者工具箱里了,欢迎下载体验!

鸿蒙开发者工具箱


作者:在人间耕耘 邮箱:1743914721@qq.com 版权声明:本文为CSDN博主原创文章,转载请附上原文出处链接及本声明。

收藏00

登录 后评论。没有帐号? 注册 一个。