Skip to content

abiJellyFish/Boost_Server_Chat_Forum

Repository files navigation

BoostServerChatForum

BoostServerChatForum 是一个基于 C++20 和 Boost 库的全栈多用户实时交流平台。后端实现多线程异步事件架构服务器(Proactor,epoll,协程),通过 MySQL 和 Redis 数据库实现信息持久化存储,前端搭建 React 界面并接入翻译接口。本地网络环境下,服务器通过 QPS 10K WebSocket 连接压力测试。

快速开始

推荐使用 Docker 部署

# 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/

alt text

项目功能

  • 用户系统 : 用户注册和用户登录,数据库持久化存储
  • 实时交流 : 实时多用户交流房间,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 集成测试

项目架构

alt text

文件结构

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 内存高效,范围查询

License

Distributed under the Boost Software License 1.0.

致谢

本项目后端框架参考了 anarthal/servertech-chat

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages