人数压力测
使用 loadtest_room 与仓库内 loadtest/ 脚本,可在可控环境验证 并发连接数、进房延迟与消息往返,适合部署前容量摸底或回归对比。生产环境务必关闭压测房或限制访问,勿省略 LOADTEST_ROOM_ENABLED 等开关。
压测房间说明
| 项目 | 说明 |
|---|---|
| 房间名 | loadtest_room,对应服务端 LoadTestRoom |
| 鉴权 | 无需 JWT,仅用于压连接与吞吐;业务房间不可照搬此模式 |
| 开关 | 环境变量 LOADTEST_ROOM_ENABLED:设为 false 时创建房间会直接报错,便于生产关闭 |
| 单房人数上限 | LOADTEST_ROOM_MAX_CLIENTS(默认上限裁剪后为较大值,仍在 1~65535) |
房间内维护 Schema 状态 connectedCount / revision;支持消息 load(负载字段 n、clientSeq),服务端回复 loadAck(含 serverTime)。可用于周期性打点观察延迟。
详见服务端:src/rooms/LoadTestRoom.ts、src/rooms/schema/LoadTestRoomState.ts。
推荐运行方式(Node 脚本)
脚本路径:仓库根目录 loadtest/concurrent-join.ts。在项目根执行(需已安装依赖、tsx 可用):
(服务端代码)
bash
npx tsx loadtest/concurrent-join.ts --endpoint http://127.0.0.1:2567 --room loadtest_room --num 500 --delay 15 --sendInterval 150常用参数:
| 参数 | 含义 |
|---|---|
--endpoint | Colyseus HTTP 入口(与浏览器访问同源) |
--room | 房间名;压测房填 loadtest_room |
--num | 模拟客户端数量 |
--delay | 相邻两次 join 之间的间隔(毫秒),减轻瞬时洪峰 |
--sendInterval | 周期性发送 load 消息的间隔(毫秒),0 表示只连不发 |
--timeout | 单次 join 超时(毫秒) |
脚本注释中的示例(与仓库一致):
(服务端代码)
text
npx tsx loadtest/concurrent-join.ts --endpoint http://127.0.0.1:2567 --room loadtest_room --num 500 --delay 15 --sendInterval 150带 JWT 的并发(业务房间)
若要对 chat_world_room 等需鉴权的房间压人数,需传入有效 JWT:
(服务端代码)
text
npx tsx loadtest/concurrent-join.ts --room chat_world_room --num 200 --token <JWT>可选:--guildId、--teamId(与 消息协议 进房参数一致)。
部署与环境变量
- 生产:建议
LOADTEST_ROOM_ENABLED=false,或通过网络策略禁止外网访问压测房。 - 单机摸底:在隔离环境开启压测房,结合
LOADTEST_ROOM_MAX_CLIENTS与机器 CPU / 内存 / 文件句柄上限逐步加压。 - 观测:关注进程 CPU、事件循环延迟、WebSocket 连接数、Redis/MySQL(若业务路径会打到);必要时对照 部署说明 做多实例与网关限制规划。