Customer Case
高并发现场答题互动系统
为某大型企业年会打造的现场答题系统,支持扫码报名、多轮次答题、军团排行与大屏实时联动,基于 XYGo Admin + WebSocket 节流广播,单场 3000+ 人同时作答,榜单延迟控制在 1 秒内。
项目背景
客户每年举办大型现场活动,需要数百至数千观众同时用手机答题,大屏即时展示排行榜与选项分布。传统轮询方案扛不住峰值,要求低延迟、防重复提交、主持人可控轮次。
核心功能
- 📱 扫码报名,按军团分组入场
- ✍️ 多轮次答题,选手异步进度
- 🏆 实时个人榜 / 军团榜与大屏 podium 展示
- 📊 题目选项投票分布动态刷新
- 🎬 主持人控场:发题、切轮、结算
技术亮点
- GoFrame + MySQL 承载活动、轮次、题目与答题记录,轮次状态机驱动业务流程
- WebSocket 按活动 Tag 推送,500ms 节流合并
rank_update/vote_update,避免千人同时提交时的广播风暴 - 乐观锁提交(
submitted_at = 0条件更新)防止重复作答;Redis 队列异步处理统计任务 - Vue3 大屏 + H5 答题页 双端 WebSocket 订阅,全屏投放与手机端同步无刷新
项目成果
| 指标 | 数据 |
|---|---|
| 单场并发答题 | 3000+ 人 |
| 榜单刷新延迟 | < 1 秒 |
| 重复提交 | 0 容忍 |
附:高并发架构要点
| 层级 | 方案 |
|---|---|
| 接入 | WebSocket 长连接,按活动 code 分 Tag 订阅 |
| 写入 | 答题提交走 HTTP,DB 乐观锁保证幂等 |
| 推送 | 标记 dirty → 500ms 定时批量广播榜单与投票 |
| 缓存/队列 | Redis 缓存在线数 + List 队列削峰 |
| 前端 | 大屏 WS 驱动 UI,HTTP 轮询仅作在线人数兜底 |