Skip to content

人数压力测

使用 loadtest_room 与仓库内 loadtest/ 脚本,可在可控环境验证 并发连接数、进房延迟与消息往返,适合部署前容量摸底或回归对比。生产环境务必关闭压测房或限制访问,勿省略 LOADTEST_ROOM_ENABLED 等开关。

压测房间说明

项目说明
房间名loadtest_room,对应服务端 LoadTestRoom
鉴权无需 JWT,仅用于压连接与吞吐;业务房间不可照搬此模式
开关环境变量 LOADTEST_ROOM_ENABLED:设为 false 时创建房间会直接报错,便于生产关闭
单房人数上限LOADTEST_ROOM_MAX_CLIENTS(默认上限裁剪后为较大值,仍在 1~65535)

房间内维护 Schema 状态 connectedCount / revision;支持消息 load(负载字段 nclientSeq),服务端回复 loadAck(含 serverTime)。可用于周期性打点观察延迟。

详见服务端:src/rooms/LoadTestRoom.tssrc/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

常用参数:

参数含义
--endpointColyseus 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(若业务路径会打到);必要时对照 部署说明 做多实例与网关限制规划。

延伸阅读