一个基于 C++ 的高性能实时聊天应用,支持多房间聊天、用户认证和消息持久化。
🌐 在线体验: https://swiftchat.demo.liangbm3.site/ (演示站点)
- 🔐 JWT 用户认证 - 安全的用户登录和注册系统
- 💬 实时聊天 - 基于 WebSocket 的即时消息传递
- 🏠 多房间支持 - 创建、加入、管理多个聊天室
- 💾 消息持久化 - 使用 SQLite 数据库保存聊天记录
- ⚡ 高性能 - 多线程架构,支持大量并发连接
- 🛡️ 线程安全 - 完善的并发控制和错误处理
- 📡 RESTful API - 完整的 REST API 接口
- 🔧 中间件支持 - 可扩展的认证中间件
- 📊 日志系统 - 完善的日志记录和调试支持
- ⚙️ 配置灵活 - 支持环境变量和命令行参数配置
- 操作系统: Linux (推荐 Ubuntu 18.04+)
- 编译器: GCC 7.0+ 或 Clang 6.0+ (支持 C++17)
- CMake: 3.10+
- SQLite3: 用于数据持久化
- OpenSSL: 用于 JWT 签名和验证
- pthread: POSIX 线程库
- websocketpp: WebSocket 服务器实现
- nlohmann/json: JSON 解析库
- jwt-cpp: JWT 处理库
- Google Test: 单元测试框架 (可选,用于测试)
- CMake: 构建系统
- Git: 版本控制系统
git clone https://github.com/liangbm3/SwiftChat.git
cd SwiftChat
Ubuntu/Debian:
sudo apt update
sudo apt install build-essential cmake libsqlite3-dev libssl-dev libboost-all-dev
CentOS/RHEL:
sudo yum install gcc-c++ cmake sqlite-devel openssl-devel
# 初始化 Git submodules
git submodule update --init --recursive
# 设置 JWT 密钥(必需)
export JWT_SECRET="your_super_secret_jwt_key_here"
# 可选:设置其他环境变量
export LOG_LEVEL=INFO
export DB_PATH=./chat.db
mkdir build
cd build
cmake ..
make -j$(nproc)
# 进入 bin 目录
cd bin
# 启动服务器
./SwiftChat
# 或者指定端口
./SwiftChat --http-port 8080 --ws-port 8081
打开浏览器访问: http://localhost:8080
SwiftChat/
├── src/ # 源代码
│ ├── main.cpp # 程序入口
│ ├── http/ # HTTP 服务器
│ ├── websocket/ # WebSocket 服务器
│ ├── db/ # 数据库层
│ ├── service/ # 业务逻辑层
│ ├── middleware/ # 中间件
│ ├── model/ # 数据模型
│ └── utils/ # 工具类
├── static/ # 前端资源
├── tests/ # 单元测试
├── docs/ # 文档
├── scripts/ # 测试脚本
├── third_party/ # 第三方库
└── CMakeLists.txt # 构建配置
变量名 | 描述 | 默认值 | 必需 |
---|---|---|---|
JWT_SECRET |
JWT 签名密钥 | 无 | ✅ |
DB_PATH |
数据库文件路径 | ./chat.db |
❌ |
LOG_LEVEL |
日志级别 (DEBUG/INFO/WARN/ERROR) | INFO |
❌ |
./SwiftChat [选项]
选项:
--http-port PORT HTTP 服务器端口 (默认: 8080)
--ws-port PORT WebSocket 服务器端口 (默认: 8081)
--db-path PATH 数据库文件路径 (默认: ./chat.db)
--static-dir DIR 静态文件目录 (默认: ./static)
--help 显示帮助信息
--version 显示版本信息
# 进入构建目录
cd build/bin
# 编译所有测试 (需要回到上级目录)
cd ..
make -j$(nproc)
# 运行所有测试
ctest --verbose
# 运行特定测试可执行文件
cd tests
./test_database_manager
./test_http_server
./test_http_request
./test_http_response
./test_user
./test_room
./test_message
./test_logger
./test_thread_pool
./test_timer
# 运行 API 测试
python3 scripts/api_test.py
# 运行端到端测试
python3 scripts/e2e_test.py
# HTTP 接口测试
k6 run --env BASE_URL=http://localhost:8080 scripts/http_test.js
# WebSocket 连接测试
k6 run \
-e BASE_URL=localhost:8080 \
-e WS_URL=localhost:8081 \
scripts/websocket_test.js
- 使用 RS256 算法签名
- Token 自动过期机制
- 安全的密钥管理
- SQL 注入防护
- 输入验证和清理
- 安全的密码存储
- CORS 策略配置
- 请求频率限制
- 安全头部设置
# 生成强密钥
export JWT_SECRET=$(openssl rand -base64 64)
# 设置文件权限
chmod 600 chat.db
# 使用防火墙
sudo ufw allow 8080
sudo ufw allow 8081
# 1. 编译 Release 版本
mkdir build-release
cd build-release
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
# 2. 设置生产环境变量
export JWT_SECRET=$(openssl rand -base64 64)
export LOG_LEVEL=INFO
export DB_PATH=/var/lib/swiftchat/chat.db
# 3. 创建数据目录
sudo mkdir -p /var/lib/swiftchat
sudo chown $USER:$USER /var/lib/swiftchat
# 4. 进入 bin 目录并启动服务
cd bin
./SwiftChat --http-port 80 --ws-port 443
创建服务文件 /etc/systemd/system/swiftchat.service
:
[Unit]
Description=SwiftChat Server
After=network.target
[Service]
Type=simple
User=swiftchat
WorkingDirectory=/opt/swiftchat/bin
Environment=JWT_SECRET=your_jwt_secret_here
Environment=LOG_LEVEL=INFO
Environment=DB_PATH=/var/lib/swiftchat/chat.db
ExecStart=/opt/swiftchat/bin/SwiftChat --http-port 8080 --ws-port 8081
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
启动服务:
sudo systemctl enable swiftchat
sudo systemctl start swiftchat
sudo systemctl status swiftchat
查看完整的 更新日志 了解项目的所有变更记录。
- ✨ 完整的实时聊天功能
- 🔐 JWT 用户认证系统
- 🏠 多房间聊天支持
- 💾 SQLite 数据库集成
- 📡 RESTful API 接口
- 文件上传和分享
- 消息加密功能
- 用户在线状态
感谢以下开源项目的支持:
- websocketpp - WebSocket 服务器库
- nlohmann/json - JSON 解析库
- jwt-cpp - JWT 处理库
- Google Test - 测试框架
本项目采用 MIT 许可证 - 详见 LICENSE 文件
⭐ 如果这个项目对您有帮助,请点一个 Star!