基于 C++17 与 Drogon 框架构建的高性能、跨平台、多功能即时通讯服务器项目。项目采用现代 C++ 设计原则,实现了清晰的分层架构,支持私聊、群聊、AI对话等核心功能,通过 WebSocket 实现低延迟双向通信。
📖 快速导航
采用Locust压测,模拟1000个用户并发对高频使用的路由发送请求,累计请求达100w+,测试结果如下
- 响应时间:绝大多数接口的平均响应时间在 3–6 ms 之间
- 百分位数:90% 的请求在 6 ms 内完成,99% 在 21 ms 内完成,说明系统在压力下仍保持稳定低延迟。
- 结论:本次压测场景下(总请求量约 105 万次,峰值吞吐 1300 req/s),系统所有接口错误率为0,响应时间满足预期(P99 < 30 ms),具备良好的高并发处理能力。
- 测试方法详见 测试
具体数据如下:
| Type | Name | Request Count | Failure Count | Median Response Time | Average Response Time | Min Response Time | Max Response Time | Average Content Size | Requests/s | Failures/s | 50% | 66% | 75% | 80% | 90% | 95% | 98% | 99% | 99.9% | 99.99% | 100% |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| POST | /auth/login | 196780 | 0 | 4 | 5.1406912709877055 | 2.184500015573576 | 175.3723000001628 | 393.0 | 244.30131002612814 | 0.0 | 4 | 5 | 5 | 6 | 7 | 8 | 12 | 20 | 63 | 110 | 180 |
| POST | /auth/login [setup] | 112490 | 0 | 4 | 4.481128073603749 | 2.188800019212067 | 359.60970001178794 | 393.0 | 139.6557290620955 | 0.0 | 4 | 4 | 4 | 5 | 5 | 7 | 15 | 24 | 57 | 83 | 360 |
| POST | /auth/refresh | 131892 | 0 | 3 | 4.026444854161244 | 1.083599985577166 | 241.12079999758862 | 105.05035938495132 | 163.74320755140812 | 0.0 | 3 | 4 | 4 | 5 | 6 | 7 | 10 | 16 | 57 | 120 | 240 |
| POST | /auth/register [setup] | 1000 | 0 | 86 | 93.43938239989802 | 22.087699995609 | 262.15540000703186 | 47.0 | 1.241494613406485 | 0.0 | 86 | 100 | 120 | 120 | 150 | 180 | 200 | 230 | 260 | 260 | 260 |
| GET | /relation/friend-requests | 57977 | 0 | 3 | 3.6083644169225906 | 1.1825999827124178 | 309.0131999924779 | 62.0 | 71.97813320146778 | 0.0 | 3 | 3 | 4 | 4 | 5 | 7 | 9 | 15 | 58 | 110 | 310 |
| GET | /relation/notifications | 115075 | 0 | 3 | 3.5555040790610297 | 1.185600005555898 | 357.3356000124477 | 84.0 | 142.86499263775127 | 0.0 | 3 | 3 | 4 | 4 | 5 | 7 | 9 | 15 | 60 | 130 | 360 |
| GET | /relation/notifications/unread | 28738 | 0 | 3 | 3.5495208051747795 | 1.193300005979836 | 376.2879999994766 | 62.0 | 35.67807220007557 | 0.0 | 3 | 3 | 4 | 4 | 5 | 7 | 9 | 16 | 58 | 110 | 380 |
| POST | /thread/create/group-chat [setup] | 750 | 0 | 23 | 25.40334626667512 | 4.654799995478243 | 75.59399999445304 | 68.0 | 0.9311209600548638 | 0.0 | 24 | 26 | 28 | 29 | 34 | 38 | 70 | 72 | 76 | 76 | 76 |
| GET | /thread/record/overview | 144198 | 0 | 4 | 5.002506665829873 | 2.133299974957481 | 376.7883999971673 | 2.0 | 179.02104026398834 | 0.0 | 4 | 5 | 5 | 6 | 7 | 8 | 11 | 19 | 67 | 110 | 380 |
| GET | /user/profile | 172864 | 0 | 3 | 3.552576255334652 | 1.187400019261986 | 446.7655000044033 | 180.0 | 214.60972485189865 | 0.0 | 3 | 3 | 4 | 4 | 5 | 7 | 9 | 14 | 61 | 130 | 450 |
| GET | /user/search | 86107 | 0 | 3 | 3.5772455642185577 | 1.1845999979414046 | 389.15579998865724 | 175.0 | 106.9013766765922 | 0.0 | 3 | 3 | 4 | 4 | 5 | 7 | 9 | 15 | 64 | 170 | 390 |
| - | Aggregated | 1047871 | 0 | 4 | 4.316431000100426 | 1.083599985577166 | 446.7655000044033 | 188.01138976076254 | 1300.9262020448668 | 0.0 | 4 | 4 | 5 | 5 | 6 | 8 | 11 | 21 | 78 | 160 | 450 |
- 高并发网络: 基于 Drogon 框架的异步 I/O 模型,支持大量并发连接。
- 模块化架构: 遵循分层架构(控制器层、服务层、数据访问层)和依赖注入原则,实现了高度解耦。
- 安全认证: JWT Token 双重Token以及Token轮换机制实现安全的会话管理。
- 实时通信:
- 支持私聊功能。
- 支持多人聊天功能。
- 支持简易AI聊天功能。
- 实时用户通知。
- 数据持久化:
- 使用 PostgreSQL 数据库存储用户信息、聊天记录、群组信息等。
- Redis 集成: 使用 Redis 实现在线用户管理和分布式缓存。
本项目采用分层架构,将不同职责的模块清晰地分离,并通过面向接口编程来降低耦合度。
- Common (共享层): 存放基础数据结构和通用组件,包括消息定义、编码解码器等。
- Server (服务器):
- Controllers (控制器层): 处理 HTTP 和 WebSocket 请求,定义 API 路由。
- Service (服务层): 实现所有核心业务逻辑,如认证、用户管理、消息服务、关系服务。
- Data (数据访问层): 通过仓库模式 (Repository Pattern) 封装所有数据库操作。
- Models (数据模型): 定义与数据库表对应的实体类。
- Auth (认证模块): 实现 JWT Token 管理、密码加密等功能。
- 用户系统: 用户注册、登录、信息修改、用户搜索
- 聊天功能: 一对一私聊、多人群聊、简单的ai问答功能
- 好友系统: 好友申请、申请处理,用户屏蔽
- 通知系统: 实时消息推送、系统通知
- 文件上传: 支持图片上传,方便用户更改头像
- 在线状态: 跟踪用户在线状态,在线时消息自动推送,离线时消息归入redis缓存队列
- 需要安装docker
当前项目使用 Docker Compose 进行部署:
# 1. 进入项目根目录 cd ChatServer # 2. 构建镜像 docker compose build # 3. 启动服务 docker compose up -d
# 查看服务运行状态 docker compose ps # 查看运行日志 docker compose logs -f chat
drogon框架提供了配置文件功能,可使用 config.json文件进行配置
可更改条目:
- 服务器监听地址(默认为localhost:10086)
- redis端口 (默认端口6379)
- PostGreSQL 端口(默认5432)
- 数据库连接数(默认20)
- redis连接数(默认2)
- 其他细微条目可以根据实际需要更改
项目包含了一些简单测试,包括 API 测试和负载测试:
# API 测试 python test/api_test.py # 负载测试 cd test/load locust -f ws_locustfile.py --headless --users 500 --spawn-rate 10 --run-time 10m --host http://127.0.0.1:10086
开发文档: 开发文档
接口文档: 接口文档