开发者工具箱-鸿蒙网络测速工具开发笔记
2025-06-04 13:15:44
207次阅读
0个评论
鸿蒙网络测速工具开发笔记
前言
最近在做鸿蒙开发者工具箱,需要加个网络测速功能。这个功能主要是用来测网速的,包括下载速度、上传速度还有网络延迟。实际开发时发现鸿蒙对网络测速的支持不太完善,得自己写测速逻辑。调试了好几次,总算搞出来一个能用的版本
一、功能说明
1.1 主要功能
- 测下载速度
- 测上传速度
- 测网络延迟
- 可以自己设置测速节点
- 自动换算单位(Kbps/Mbps/Gbps)
1.2 界面功能
- 实时显示速度
- 显示测试进度
- 可以设置自定义服务器
- 支持收藏
- 有使用说明
二、实现过程
2.1 测速原理
测速的基本思路就是下载和上传文件来测试网速。在鸿蒙里,我们主要用 HTTP 请求来实现:
- 
  下载测速 - 从服务器下载个测试文件(我用的10MB)
- 记下开始时间
- 下载过程中实时算已下载的数据量
- 速度 = 数据量/时间
- 多测几次取平均值,这样准一点
 
- 
  上传测速 - 生成个测试数据(也是10MB)
- 记下开始时间
- 实时算已上传的数据量
- 速度 = 数据量/时间
- 同样多测几次
 
- 
  延迟测试 - 发个 HTTP HEAD 请求
- 记下发送时间
- 记下收到响应的时间
- 延迟 = 响应时间 - 发送时间
- 测几次取最小值
 
- 
  单位换算 - 1 Mbps = 1024 Kbps
- 1 Gbps = 1024 Mbps
- 根据速度大小自动选合适的单位
 
- 
  服务器选择 - 维护个服务器列表
- 测每个服务器的延迟
- 选延迟最低的
- 也可以自己设置服务器
 
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 遇到的问题
- 
  测速不准 - 问题:测出来的速度波动太大
- 解决:多测几次取平均值
 
- 
  服务器问题 - 问题:不同服务器测出来差很多
- 解决:自动选最好的服务器
 
- 
  进度显示 - 问题:进度更新不及时
- 解决:加了动画效果
 
- 
  内存问题 - 问题:内存占用太大
- 解决:及时释放资源
 
3.2 优化建议
- 
  测速优化 - 多测几次
- 调整测试文件大小
- 支持断点续传
 
- 
  性能优化 - 优化UI
- 减少内存占用
- 及时释放资源
 
- 
  用户体验 - 加个测试历史
- 支持分享结果
- 优化动画效果
 
- 
  安全性 - 验证服务器地址
- 限制测试频率
- 保护用户隐私
 
四、总结
这个测速工具基本功能都有了,可以:
- 测网速
- 查网络问题
- 优化网络设置
- 评估网络质量
五、参考资料
欢迎体验
这个测速工具已经集成到鸿蒙开发者工具箱里了,欢迎下载体验!
作者:在人间耕耘 邮箱:1743914721@qq.com 版权声明:本文为CSDN博主原创文章,转载请附上原文出处链接及本声明。
00
- 0回答
- 0粉丝
- 0关注
相关话题
