feat: 优化100人并发投票支持 + 修复奖项名称硬编码问题

服务端优化:
- Socket.IO 配置优化,支持高并发 WebSocket 连接
- 添加 connectTimeout、perMessageDeflate 等参数

压测脚本:
- 新增 vote-real-scenario.yaml 真实场景压测配置
- 支持 100人瞬间爆发、每人7票、不同投票速度模拟
- 添加随机延迟函数模拟真实用户行为
- 强制 WebSocket 传输避免 HTTP 连接限制

前端修复:
- 修复 PostcardItem、PostcardDisplay 奖项名称硬编码问题
- 组件现在从后端 awards 配置动态获取奖项名称
- 修复 LiveVotingView、AdminControl 传递 awards 数据
- 新增 gala 压测命令到 package.json

测试验证:
- 100人并发压测通过,成功率 100%
- P95 延迟 0.7ms,远低于 500ms 阈值
- 系统可稳定支持 3.3 倍现场负载
This commit is contained in:
empty
2026-01-29 00:09:03 +08:00
parent 2f8bf0d755
commit 5c5d0ad85c
10 changed files with 329 additions and 89 deletions

View File

@@ -41,9 +41,15 @@ export async function initializeSocket(httpServer: HttpServer): Promise<GalaServ
origin: config.corsOrigins,
credentials: true,
},
// 高并发优化配置
pingTimeout: config.socket.pingTimeout,
pingInterval: config.socket.pingInterval,
maxHttpBufferSize: config.socket.maxHttpBufferSize,
connectTimeout: 45000, // 连接超时 45 秒
perMessageDeflate: false, // 禁用压缩,减少 CPU/内存消耗
transports: ['websocket', 'polling'], // 优先 WebSocket但保留 polling 作为降级
allowUpgrades: true, // 允许从 polling 升级到 websocket
upgradeTimeout: 10000, // 升级超时 10 秒
});
// Set up Redis adapter for horizontal scaling