feat: 自适应测速时长(阶段最短5秒,负载翻倍至512MB)+ 公网IP探测与内网标注
This commit is contained in:
4 files changed
+187
-51
No files matched your search
@@ -10,9 +10,13 @@
|
||||
## 功能特性
|
||||
|
||||
- ⚡ **延迟测试**: 前端连续 10 次 ping,取中位数作为延迟、平均绝对偏差作为抖动
|
||||
- ⬇️ **下载测试**: 渐进式下载 1 / 2.5 / 5 / 10 / 25 MB 随机数据,实时仪表盘,取最优值
|
||||
- ⬆️ **上传测试**: 渐进式上传 1 / 2.5 / 5 / 10 MB 伪随机数据,实时仪表盘,取最优值
|
||||
- ⬇️ **下载测试**: 自适应负载——单轮目标 ~2 秒、阶段最短 5 秒,负载从 1MB 起逐轮翻倍
|
||||
(上限 400MB),实时仪表盘,取最优值;慢速连接 1-2 轮即结束,快速连接自动加大负载
|
||||
- ⬆️ **上传测试**: 同样的自适应策略(1MB 起翻倍,上限 256MB),实时仪表盘,取最优值
|
||||
- 🏆 **排行榜**: 下载 / 上传 / 延迟 三个榜单各取 Top 10,IP 自动打码(保留前 3 段)
|
||||
- 🌐 **公网 IP 识别**: 服务器位于 NAT 后(公网访问经路由器转发,服务器只能看到内网 IP),
|
||||
前端通过 ipinfo.io / ipify 探测真实公网出口 IP 用于展示与排行;内网 IP 在排行榜中标注
|
||||
"内网 / NAT"
|
||||
- 🔒 **Unix socket 监听**: 由 Caddy 反代对外提供 HTTPS,不暴露 TCP 端口
|
||||
|
||||
## 项目结构
|
||||
@@ -90,20 +94,24 @@ speedtest.lmve.net {
|
||||
addr = "/opt/speedtest/web.sock" # 以 / 开头为 unix socket,否则为 TCP 端口
|
||||
|
||||
[speedtest]
|
||||
max_download_bytes = 104857600 # 单次下载请求上限(默认 100 MB)
|
||||
max_upload_bytes = 104857600 # 单次上传请求上限(默认 100 MB)
|
||||
max_download_bytes = 536870912 # 单次下载请求上限(默认 512 MB)
|
||||
max_upload_bytes = 536870912 # 单次上传请求上限(默认 512 MB)
|
||||
```
|
||||
|
||||
> 注:默认上限 512MB 服务于前端自适应测速(快速连接负载会翻倍增长);
|
||||
> 旧版本配置中的 100MB 上限可手动调大,或删除配置行后重启让程序补全默认值。
|
||||
|
||||
## API
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| GET | `/` | 测速页面 |
|
||||
| GET | `/api/ping` | 延迟探测(返回 `{"pong":true,"ts":...}`) |
|
||||
| GET | `/api/download?size=N` | 下载测速,流式返回 N 字节随机数据(默认 10MB,上限 100MB) |
|
||||
| GET | `/api/ping` | 延迟探测(返回 `{"pong":true,"ts":...,"client_ip":...}`) |
|
||||
| GET | `/api/download?size=N` | 下载测速,流式返回 N 字节随机数据(默认 10MB,上限 512MB) |
|
||||
| POST | `/api/upload` | 上传测速,接收请求体并返回 `received/elapsed_s/mbps` |
|
||||
| POST | `/api/result` | 提交结果 `{latency_ms, jitter_ms, download_mbps, upload_mbps}` |
|
||||
| GET | `/api/rankings` | 排行榜(`download/upload/latency` 三榜 + `total`) |
|
||||
| POST | `/api/result` | 提交结果 `{latency_ms, jitter_ms, download_mbps, upload_mbps, client_ip?}` |
|
||||
| GET | `/api/rankings` | 排行榜(`download/upload/latency` 三榜 + `total`,含 `is_private_ip` 标注) |
|
||||
|
||||
客户端真实 IP 通过 Caddy 注入的 `X-Real-IP` / `X-Forwarded-For` 头识别,
|
||||
排行榜展示时对 IP 打码保护隐私。
|
||||
客户端真实 IP 优先取前端探测的公网出口 IP(`client_ip` 字段),
|
||||
否则回退到 Caddy 注入的 `X-Real-IP` / `X-Forwarded-For`;
|
||||
排行榜展示时对 IP 打码保护隐私,NAT/内网 IP 标注"内网 / NAT"。
|
||||
Reference in New Issue
Block a user