Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Errrori/Chat

Repository files navigation

C++ 高并发即时通讯服务器 (ChatServer)

基于 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缓存队列

构建与运行

1. 前置依赖

  • 需要安装docker

2. 项目构建

当前项目使用 Docker Compose 进行部署:

# 1. 进入项目根目录
cd ChatServer
# 2. 构建镜像
docker compose build
# 3. 启动服务
docker compose up -d

3. 查看运行状态

# 查看服务运行状态
docker compose ps
# 查看运行日志
docker compose logs -f chat

4. 可自定义配置

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

在线文档

开发文档: 开发文档

接口文档: 接口文档

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /