60 lines
2.6 KiB
Markdown
60 lines
2.6 KiB
Markdown
# NixMsg 压测工具(`test/load`)
|
||
|
||
本目录提供可执行 PRD 第 8 节指标的压测客户端。**不进 CI**;`go test ./test/load/` 只跑工具自身的最小单测和短时冒烟。
|
||
|
||
长时间 1000 连接 / 每秒 200 条 / 10 分钟本轮按负责人要求不跑,但工具已能执行。本地验收口径:50 个连接、每秒 20 条、跑 1 分钟能打出报告。
|
||
|
||
## 连接规则(DEVELOPMENT 第 5 节)
|
||
|
||
- MQTT 5;`CleanStart = true`;心跳 30 秒。
|
||
- ClientID、Username 都等于端编号;Password 为登录密码。
|
||
- 只订阅 `nix/c/{编号}/down`,只向 `nix/c/{编号}/up` 发布。
|
||
- 订阅完成后发 `hello`,收到成功 `resp` 才算在线,才开始收发。
|
||
|
||
默认走 WebSocket `ws://<http>/mqtt`(子协议 `mqtt`)。也可用 `-tcp` 走裸 MQTT。
|
||
|
||
## 准备端
|
||
|
||
任选其一:
|
||
|
||
1. **管理接口批量开通**:`-admin-pass` 或 `-admin-token`。工具用 `POST /api/admin/endpoints/import` 一次最多 1000 行。
|
||
2. **自助注册**:管理员已开启注册时传 `-register-code`。
|
||
3. **复用已开通的端**:`-reuse`。编号冲突(`409 id_taken`)视为已存在并继续登录。
|
||
|
||
端编号为 `{prefix}{序号}`,默认 `qb0000` 起。登录密码默认 `password1234`。
|
||
|
||
## 场景
|
||
|
||
| `-scenario` | 行为 |
|
||
|---|---|
|
||
| `hold` | 只保持 N 条已握手连接(配合 `-hold`) |
|
||
| `dm` | 按 `-rate` 做单聊 send → 等对方 msg → ack |
|
||
| `group` | 建一个 `-group-size` 人的群,发一条,统计从提交成功到成员都收到 `msg` 的耗时(推送排队的上界) |
|
||
| `all`(默认) | 先 hold(若设置),再单聊,再群发 |
|
||
|
||
输出:提交与送达的 P50/P95/P99(毫秒)、错误码分布、连接掉线数、群推送排队耗时。
|
||
|
||
## 用法
|
||
|
||
在仓库根目录:
|
||
|
||
```text
|
||
go run ./test/load/cmd/mqttbench -http http://127.0.0.1:<端口> -admin-pass <管理员密码> -n 50 -rate 20 -duration 1m
|
||
```
|
||
|
||
常用参数:
|
||
|
||
| 参数 | 默认 | 说明 |
|
||
|---|---|---|
|
||
| `-http` | (必填,除非只测裸 TCP 且 `-reuse`) | 服务 HTTP 根 |
|
||
| `-tcp` | 空 | 裸 MQTT `host:port` |
|
||
| `-n` | 50 | 连接数 |
|
||
| `-rate` | 20 | 单聊每秒条数 |
|
||
| `-duration` | 1m | 单聊时长;`0` 跳过单聊 |
|
||
| `-group-size` | 与 `-n` 相同 | `0` 跳过群发 |
|
||
| `-reuse` | false | 复用已开通编号 |
|
||
| `-register-code` | 空 | 自助注册 |
|
||
| `-prefix` | qb | 端编号前缀 |
|
||
|
||
不要把本命令加进 `task check`。完整规模(1000 在线、每秒 200、10 分钟、1000 人群发 5 秒)在专用机器上把 `-n`/`-rate`/`-duration`/`-group-size` 调到 PRD 第 8 节即可。
|