- 技术栈:React + Vite + Tailwind CSS
- 组件:
PollForm.jsx:单选问卷提交组件ResultChart.jsx:柱状图展示实时投票结果App.jsx:状态管理与 WebSocket 客户端逻辑
- 技术栈:Golang + Gin + GORM + MySQL + WebSocket
- 模块划分:
model:定义数据库结构(Poll、Option)与预置问卷加载controller:实现 REST 接口/api/poll与/api/poll/votews:WebSocket 广播中心,负责所有连接维护与实时数据推送router:统一路由注册
- 返回当前问卷及各选项票数,JSON 示例如下
{
"id": 1,
"question": "What's your favorite mobile game?",
"options": [
{ "id": 1, "text": "Art of War", "count": 3 },
{ "id": 2, "text": "Island War", "count": 1 }
]
}- 请求体
{ "option_id": 1 }- 返回体
{ "message": "Vote submitted" }- WebSocket 通道,实时接收完整
poll对象更新(格式同GET /api/poll返回)
- 后端维护全局客户端连接池
map[*websocket.Conn]bool - 每次投票后:
- 立即更新数据库中对应
Option.Count - 重新查询当前完整
poll数据 - 通过 WebSocket 广播给所有客户端
- 立即更新数据库中对应
- 前端接收到数据后:自动刷新
poll状态,触发 UI 更新
docker-compose up --build