群晖NAS搭建测速网站,支持万兆
使用群晖docker和homebox程序搭建局域网测速网站,内网带宽测试
Homebox
家庭网络工具箱,主要用于组建家庭局域网时的一些调试、检测、压测工具。
开源项目链接:https://github.com/XGHeaven/homebox
需要家庭内有一个较强服务端,否则服务端可能会成为瓶颈。测试端需要使用现代新版浏览器,比如 Chrome/Firefox 等。如果测速的是高速网络,请尝试保证机器 CPU 性能足够强劲
特点
- 面向未来浏览器设计
- 高达 10G 的浏览器速度测试
- 自带 Ping 检测
- 丰富的自定义测速参数
- 服务端无需固态要求
- 友好的 UI 交互
- 针对低速网络(< 2.5G)优化测速资源占用
搭建教程
先到套件中心安装Docker套件
安装好以后打开Docker在注册表这里搜索:homebox,选择第一个,点击【下载】
稍等片刻下载完成,完成后再到【映像】选择到我们刚才下载的点击【启动】
开始创建容器,这里点击【高级设置】
点击端口设置,按照下图所示设置,然后点击应用
最后确认一下即可点击【应用】,应用后自动启动容器。
然后就安装完成了,在浏览器中输入 http://你群晖的IP:3300
即可
使用说明
输入网址之后,会看到分为两种测试模式,分别是单次测速和持续压测。
- 单次测速的模式下,会依次执行 Ping/Download/Upload 测试,一般可以直接用这个模式。
- 持续压测的模式下,可以无限制以最高速度压测链路,通常可以用于设备移动中链路稳定性测试、多设备压测、路由器转发散热性能测试等。
Terminal(WIP)
某些极端情况下,机器性能不足或者浏览器版本过低,可以直接通过复制浏览器中提供的测速脚本,在终端中测速。一方面方便某些懒人不愿意打命令行,另一方面脱离了浏览器的环境,测速性能和准确度会更高
Design
由于众所周知的原因,浏览器中 js 的效率是比较低的,而且在网络请求的时候,还是占用大量的内存。所以为了避免主线程的卡顿,所有的请求都是在 Web Worker 中进行的。
但仅仅一个 Worker 是支撑不住万兆网络的测速要求的,因为一个 Worker 并发请求的能力依旧很低。比如使用 curl 单链接单进程最高可以达到 2GB/s 的速度,核算过来大约 16Gbps。而一个 Worker 就算是开启多请求并发的速度,也仅仅只能达到 500MB/s,可见性能有多低。
解决方案也很简单,创建多个 Worker 叠加测速,来叠加到万兆网络的要求。但是多个 Worker 对机器的性能要求很高,如果只是用于千兆网络测速,而机器性能又比较弱,就会导致测速不准。
这就是为什么会有两种模式的原因,高速模式和低速模式。在高速模式下,会启用多 Worker,而低速模式下,仅仅启用一个 Worker 来减少资源的占用。
推荐阅读
- 高性价比和便宜的VPS/云服务器推荐: https://blog.zeruns.tech/archives/383.html
- 搭建内网穿透服务器,带Web面板:https://blog.zeruns.tech/archives/397.html
- 怎样搭建个人博客:https://blog.zeruns.tech/archives/218.html
- 学生优惠权益大全:https://blog.zeruns.tech/archives/557.html
- IPv6/IPv4 + aliddns 实现黑群晖外网控制和访问:https://blog.zeruns.tech/archives/263.html
- 群晖NAS利用Docker容器搭建KMS激活服务器:https://blog.zeruns.tech/archives/314.html
- 【干货】RL-GAN For NLP: 强化学习在生成对抗网络文本生成中扮演的角色
- python接口自动化15-multipart/form-data表单提交
- appium+python自动化32-android_uiautomator定位进阶版
- appium+python自动化33-解锁九宫格(TouchAction)
- 用qemu中最少的代码实现一个kvm模拟器
- 关关的刷题日记07——Leetcode 26. Remove Duplicates from Sorted Array 方法1
- openstack如何扩展API之一:新添加API
- 值得收臧 | 从零开始搭建带GPU加速的深度学习环境(操作系统、驱动和各种机器学习库)
- python接口自动化16-multipart/form-data上传多个附件
- python接口自动化17-响应时间与超时(timeout)
- python+requests+excel接口自动化数据驱动
- python+selenium+requests爬取我的博客粉丝的名称
- python接口自动化21-规范的API接口文档示例
- 自然语言处理(4)之中文文本挖掘流程详解(小白入门必读)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 通过命令下载执行恶意代码的几种姿势
- CS如何配置通过CDN上线
- Height transition
- 【DB笔试面试861】在Oracle中,有哪些常见组件?
- 【DB笔试面试862】在Oracle中,如何安装DBMS_NETWORK_ACL_ADMIN包?
- 【DB宝19】在Docker中使用MySQL高可用之MHA
- 【DB笔试面试863】在Oracle中,如何让Oracle DB、监听和oem开机启动?
- 【DB笔试面试864】在Oracle中,响应文件在什么位置?
- 设计模式几大原则
- Thrift使用教程(Java版本)
- C语言实现三子棋
- C语言操作符
- 一级指针、二级指针、指针和数组、指针数组总结
- C++入门知识(一)
- C++入门知识(二)