BoostServerChatForum 是一个基于 C++20 和 Boost 库的全栈多用户实时交流平台。后端实现多线程异步事件架构服务器(Proactor,epoll,协程),通过 MySQL 和 Redis 数据库实现信息持久化存储,前端搭建 React 界面并接入翻译接口。本地网络环境下,服务器通过 QPS 10K WebSocket 连接压力测试。
# 1. 克隆仓库
git clone https://github.com/abiJellyFish/Boost_Server_Chat_Forum.git && cd Boost_Server_Chat_Forum
# 2. 构建 Docker 镜像并启动容器
docker compose up -d
# 3. 在浏览器访问
# http://localhost:8080- 环境要求:
- Ubuntu 22.04 LTS
- GCC 10.5+ / Clang 14+
- CMake 3.16+
- Boost 1.86+
- OpenSSL、MySQL 8.0、Redis 6.0
- Node.js 16+
# 1. 构建后端服务器
cd server
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
# 2. 启动 MySQL 和 Redis 数据库
mysql -u root -p
redis-cli
# 3. 启动服务器
./main 0.0.0.0 8080 ../../client/out
# 多线程(用于测试)
./main 0.0.0.0 8080 ../../client/out -j 16
# 4. 安装客户端组件,部署 web 客户端
cd client
npm install
npm run build
# 或者使用开发模式
npm run dev # 访问 http://localhost:3000
# 5. 在浏览器访问
# http://localhost:8080# 在浏览器打开多窗口,分别登录不同账号,测试聊天论坛效果。选取文字查看翻译效果。
# 使用 tcpdump 抓包工具
sudo tcpdump -i lo -A port 8080
# C++ 单元测试
cd server/build
cmake -DBUILD_TESTING=ON ..
make -j$(nproc)
ctest --output-on-failure
# 前端单元测试
cd client
npx jest --no-coverage
# Python 集成测试(需要先启动 docker compose)
docker compose up -d
pip install -r test/integration/requirements.txt
pytest test/integration/ -v
# 使用 wrk 进行压力测试
curl -s http://localhost:8080/ > /dev/null
wrk -t4 -c100 -d30s --latency http://localhost:8080/- 用户系统 : 用户注册和用户登录,数据库持久化存储
- 实时交流 : 实时多用户交流房间,WebSocket 长连接和内存 Pub/Sub 消息广播
- 消息持久化 : Redis Streams 消息存储,支持历史消息回溯
- 在线翻译 : 接入 MyMemory 翻译 API,前端气泡划词翻译
- 性能优化 : 静态文件在内存缓存,scrypt 线程池不阻塞事件循环
- 容器化部署 : Docker 多阶段构建,GitHub Actions 自动化部署和测试
| 层级 | 技术 | 说明 |
|---|---|---|
| 后端 | C++20 + Boost 1.86 | Boost.Asio(Proactor+epoll+协程)、Boost.Beast(HTTP/WebSocket)、Boost.MySQL、Boost.Redis、Boost.JSON |
| 前端 | Next.js + React 18 + TypeScript | MUI + Tailwind CSS,构建导出静态文件,由 C++ 服务器托管 |
| 数据库 | MySQL 8.0 + Redis 6.0 | MySQL 存用户数据,Redis Streams 存消息流 + 会话 Token |
| 构建 | CMake + Docker Compose | 多阶段 Docker 构建,Alpine Linux 基础镜像 |
| 部署 | Docker + GitHub Actions | 推送到 ghcr.io,SSH 远程部署 |
| 测试 | Boost.Test + Jest + pytest | C++ 单元测试、前端单元测试、Python 集成测试 |
servertech_chat/
├── server/ # C++ 服务器
│ ├── include/
│ │ ├── api/ # API 层(auth、chat_websocket、translate)
│ │ ├── services/ # 服务层(mysql、redis、pubsub、auth)
│ │ └── util/ # 工具库(base64、cookie、scrypt、skiplist)
│ ├── src/ # 源文件
│ │ ├── api/
│ │ ├── services/
│ │ ├── util/
│ │ └── main.cpp # 程序入口
│ └── test/ # C++ 单元测试(Boost.Test)
├── client/ # React 前端
│ ├── pages/ # 页面(注册、登录、聊天)
│ ├── components/ # 组件
│ ├── lib/ # 工具库(API 调用,WebSocket 解析)
│ └── __tests__/ # 前端单元测试
├── test/integration/ # Python 集成测试
├── doc/ # 项目文档
├── docker-compose.yml # Docker 编排
├── Dockerfile # 多阶段构建
└── .github/workflows/ # CI/CD
| 措施 | 实现 |
|---|---|
| 用户身份 | scrypt 密码哈希 + HttpOnly Cookie 鉴权 |
| SQL 注入防护 | 预编译语句(? 占位符) |
| 密码存储 | scrypt,内存硬哈希 |
| XSS 防护 | Cookie HttpOnly(JavaScript 不可读) |
| CSRF 防护 | Cookie SameSite=Strict |
| 目录遍历 | 过滤绝对路径 |
| 优化 | 位置 | 效果 |
|---|---|---|
| scrypt 线程池 | util/thread_pool.hpp |
密码哈希不阻塞事件循环 |
| 多线程 io_context | main.cpp (-j N) |
多线程运行事件循环 |
| 跳表有序集合 | util/skiplist.hpp |
用户 ID 去重,自动排序 |
| Redis Stream 消息存储 | services/redis_client.cpp |
内存高效,范围查询 |
Distributed under the Boost Software License 1.0.
本项目后端框架参考了 anarthal/servertech-chat 。

