Skip to content

asdlem/real-time-voting-system

Repository files navigation

实时投票系统 (V3升级版)

项目介绍

实时投票系统是一个高性能、实时的在线投票应用,支持创建和参与各类投票,并通过WebSocket实时展示投票结果。系统无需登录即可使用,专注于提供流畅的用户体验和可靠的实时数据更新。

主要功能

  • 投票创建与管理:支持创建单选和多选投票,设置截止时间
  • 实时结果查看:通过WebSocket技术实时更新投票结果
  • 多样化结果展示:支持条形图、饼图和进度条多种展示方式
  • 高并发支持:经过优化的系统架构,支持高并发投票和实时更新
  • 防重复投票:基于IP地址的防重复投票机制
  • 管理功能:投票编辑、删除和数据导出

技术栈

  • 后端:Go 1.24.2 + Gin框架
  • 前端:React 18 + Ant Design + Recharts
  • 数据库:MySQL 8.0
  • 缓存:Redis 7.0
  • 部署:Docker + Docker Compose

快速开始

环境要求

  • Docker 24.0+
  • Docker Compose v2.24+
  • 8090端口和3000端口可用

部署步骤

  1. 克隆仓库
git clone https://github.com/your-org/real-time-voting-system.git
cd real-time-voting-system
  1. 使用Docker Compose启动服务
docker-compose up -d
  1. 访问应用

前端:http://localhost:3000 API文档:http://localhost:8090/docs

高并发测试

系统提供了高并发测试脚本,可以测试系统在高负载下的表现:

# 安装测试依赖
pip install -r tests/requirements.txt

# 运行高并发测试
python tests/performance_test.py

测试结果示例:

  • 支持300个并发请求,响应时间<200ms
  • 每秒处理100+投票请求
  • WebSocket稳定处理1000+连接

性能优化

V3升级版本针对实时性和可靠性进行了多项优化:

WebSocket优化

  1. 消息历史缓存:新连接立即获取最新状态,不错过更新
  2. 消息重试机制:确保所有更新消息送达客户端
  3. 连接状态管理:智能心跳检测和断线重连

数据一致性保障

  1. 延迟双删缓存:确保缓存与数据库一致性
  2. 投票原子操作:使用Redis原子递增防止并发问题
  3. 备份轮询机制:WebSocket连接失败时自动降级

前端性能优化

  1. 数据一致性验证:检测和修复可能的数据不一致
  2. 状态管理优化:避免不必要的重渲染
  3. 资源懒加载:提高页面加载速度

项目结构

├── backend/              # 后端Go服务
│   ├── cmd/              # 入口文件
│   ├── internal/         # 内部包
│   │   ├── api/          # API处理器
│   │   ├── config/       # 配置
│   │   ├── db/           # 数据库
│   │   ├── models/       # 数据模型
│   │   ├── service/      # 业务逻辑
│   │   └── websocket/    # WebSocket服务
│   ├── pkg/              # 公共包
│   └── Dockerfile        # 后端Docker配置
│
├── frontend/             # 前端React应用
│   ├── public/           # 静态资源
│   ├── src/              # 源代码
│   │   ├── components/   # 组件
│   │   ├── hooks/        # 自定义hooks
│   │   ├── pages/        # 页面
│   │   ├── services/     # API服务
│   │   └── utils/        # 工具函数
│   └── Dockerfile        # 前端Docker配置
│
├── docs/                 # 文档
│   ├── 技术文档.md        # 技术设计文档
│   └── API文档.md         # API接口文档
│
├── tests/                # 测试脚本
│   └── performance_test.py # 性能测试
│
├── docker-compose.yml    # Docker Compose配置
└── README.md             # 项目说明

API接口

详细API接口文档见 docs/API文档.md

主要接口包括:

  • /api/polls - 创建投票
  • /api/polls - 获取投票列表
  • /api/polls/{id} - 获取投票详情
  • /api/polls/{id}/vote - 提交投票
  • /api/polls/{id}/ws - WebSocket连接(推荐)
  • /api/polls/{id}/live - SSE连接(备用)

技术特性

实时更新机制

系统通过优化的WebSocket实现,提供高效可靠的实时更新:

  1. 连接管理:按投票ID分组管理连接,降低广播开销
  2. 消息缓存:保存历史消息,确保新客户端立即获得最新状态
  3. 消息时间戳:客户端可基于时间戳排序和去重消息
  4. 自动重连:客户端断线自动重连,保证实时性

高并发处理

系统在高并发场景下表现优异:

  1. 缓存策略:多级缓存提高数据访问速度
  2. 数据库优化:索引优化、连接池管理
  3. 异步处理:使用协程和通道进行非阻塞操作
  4. 限流保护:IP级别的限流防止恶意请求

性能监控

系统通过日志分析进行性能监控:

  1. 健康检查/api/health 接口提供系统状态
  2. 性能日志:记录关键操作的执行时间和资源消耗
  3. 日志系统:结构化日志记录系统行为和异常

提交要求

本项目完全满足以下提交要求:

  1. 完善的技术文档docs/技术文档.md 详细描述了系统设计与实现
  2. 详细的API文档docs/API文档.md 提供了所有接口的详细说明
  3. 前后端完整实现:提供Docker化的完整应用
  4. 高并发支持:经测试可支持100+QPS的投票请求

许可证

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors