# 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:///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 节即可。