基于 C++ 从零开发的分布式 IM 聊天项目,包含完整的服务端集群与原生 PC 客户端。代码轻量化、不依赖重型框架,非常适合学习 Linux 高并发网络编程、TCP 长连接与分布式服务通信。
本项目是一套多服务分布式即时通讯系统,采用 网关 + 微服务 架构,将登录验证、用户状态、消息聊天、网关接入完全拆分解耦。项目纯原生 C++ 实现,不依赖重型第三方网络框架,结构清晰、代码精炼。
项目包含:
- ✅ 完整后端集群服务(5 个独立微服务)
- ✅ 原生 PC 客户端
- ✅ 可直接编译、部署、联机聊天
| 类别 | 技术 |
|---|---|
| 核心语言 | C++11+ |
| 编译工具 | CMake、Makefile |
| 配置管理 | config.ini 配置文件 |
| 通信方式 | TCP 长连接 |
| 架构模式 | 网关接入 + 业务微服务拆分,支持水平扩容 |
| 运行环境 | Linux(Ubuntu / CentOS) |
项目共 5 个后端服务 + 1 个客户端,各司其职,完全解耦:
| 服务 | 职责 |
|---|---|
| GateServer | 网关服务,客户端唯一对外入口,负责 TCP 连接管理、消息路由、流量收敛、请求转发,屏蔽后端所有业务服务 |
| ChatServer / ChatServer2 | 聊天服务,核心消息服务,处理用户私聊消息收发与转发。双服务实例设计,支持分布式水平扩容 |
| VarifyServer | 验证服务,独立账号鉴权服务,专门处理用户登录校验、身份验证 |
| StatusServer | 状态服务,统一管理全局用户在线状态,监听用户上下线事件,提供状态查询与同步能力 |
| chat(客户端) | 原生 PC 客户端,实现网关连接、账号登录、实时消息收发、聊天交互等完整前端能力 |
chat/
├── ChatServer/ # 主聊天业务服务
├── ChatServer2/ # 扩容聊天服务实例
├── GateServer/ # 网关接入服务
├── StatusServer/ # 用户在线状态服务
├── VarifyServer/ # 账号登录验证服务
├── chat/ # PC 客户端源码
└── README.md # 项目说明文档
所有服务均独立配置 config.ini,可自定义端口、服务通信地址、运行参数。
- Linux 系统(Ubuntu / CentOS)
- gcc / g++ 支持 C++11 及以上
- CMake、make 编译工具
git clone https://github.com/ljcjclljc/chat.git
cd chat以 GateServer 为例,其余服务编译方式一致:
cd GateServer/GateServer
mkdir build && cd build
cmake ..
make -j4依次编译:ChatServer、ChatServer2、VarifyServer、StatusServer
cd chat
make- 修改各服务
config.ini配置端口与通信地址 - 按以下顺序启动服务:
VarifyServer → StatusServer → ChatServer → ChatServer2 → GateServer- 启动客户端,填写网关地址即可登录聊天
- 独立服务账号登录、身份鉴权
- TCP 长连接网关统一接入管理
- 用户一对一实时私聊
- 多服务分布式扩容,支持高并发在线用户
- 全局用户在线状态实时同步与监听
- 全配置化管理,灵活修改服务参数
- 架构清晰:网关、鉴权、状态、消息完全解耦,符合分布式 IM 设计思想
- 可扩展性强:多聊天服务实例支持水平扩容
- 纯原生实现:无过度封装框架,适合深入学习网络底层原理
- 前后端完整:服务端集群 + 客户端全套源码,可直接运行演示
- 接入 MySQL / Redis 实现用户数据、消息持久化
- 增加 TCP 心跳保活、断线重连、离线消息推送
- 新增群聊、文件传输、图片消息功能
- 增加服务注册发现,替代静态 ini 配置
- 完善日志系统、性能监控与异常处理
本项目为学习型开源项目,仅供 C++ 网络编程、分布式 IM 架构学习交流使用。可自由 Fork、修改源码,商用请自行完善稳定性、安全性与高可用能力。
作者:ljcjclljc