一个基于微服务架构的即时通讯系统,支持文字、语音、图片等多种消息类型,提供用户管理、好友关系、消息转发等完整功能。
- 编程语言: C++11+
- RPC框架: Apache brpc
- 数据库: MySQL (ODB ORM), Redis, Elasticsearch
- 消息队列: RabbitMQ
- 服务注册与发现: etcd
- 第三方服务: 百度AI SDK (语音识别、OCR等)
- 容器化: Docker, Docker Compose
server/
├── service/
│ ├── speech/ # 语音识别服务
│ ├── file/ # 文件存储服务
│ ├── user/ # 用户管理服务
│ ├── forward/ # 消息转发服务
│ ├── message/ # 消息存储服务
│ ├── friend/ # 好友关系服务
│ └── gateway/ # 网关服务 (HTTP/WebSocket)
├── common/ # 公共组件
├── proto/ # Protobuf协议定义
├── odb/ # 数据库实体定义
└── third/ # 第三方依赖
- 用户注册/登录
- 手机验证码验证
- 用户信息管理 (昵称、头像、签名等)
- 用户搜索
- 好友申请/处理
- 好友列表管理
- 好友关系存储
- 消息持久化
- 历史消息查询
- 范围消息搜索
- 实时消息转发
- 基于 RabbitMQ 的消息队列
- 用户在线状态管理
- 文件上传/下载
- 头像、图片、语音等多媒体存储
- 语音识别 (集成百度 AI)
- 语音转文字
- HTTP/WebSocket 接口
- 用户认证与会话管理
- 请求路由与负载均衡
- Ubuntu 22.04 (推荐)
- CMake 3.12+
- GCC/Clang (支持 C++11)
- Docker & Docker Compose
cd server
mkdir build && cd build
cmake ..
make -j$(nproc)
# 拷贝构建产物
cd ..
bash script/build.sh
# 收集依赖库
bash script/depend.sh每个服务的配置文件位于 server/conf 目录:
- speech_server.conf - 语音服务配置
- file_server.conf - 文件服务配置
- user_server.conf - 用户服务配置
- forward_server.conf - 转发服务配置
- message_server.conf - 消息服务配置
- friend_server.conf - 好友服务配置
- gateway_server.conf - 网关服务配置
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f [service_name]
# 停止服务
docker-compose down服务启动顺序由 script/entrypoint.sh 控制,确保依赖服务先启动。
- user.sql - 用户信息表
- relation.sql - 好友关系表
- friend_request.sql - 好友申请表
- session.sql - 会话表
- session_member.sql - 会话成员表
- message.sql - 消息记录表
使用 ODB ORM 框架进行对象关系映射,实体类定义:
User- 用户实体Relation- 好友关系实体FriendRequest- 好友申请实体Session- 会话实体SessionMember- 会话成员实体Message- 消息实体
基于 etcd 实现的服务注册与发现机制
ChannelManager 负责管理 RPC 服务通道
基于 RabbitMQ 的消息队列封装
- MySQL:
UserTable,MessageTable,RelationTable等 - Redis:
Session,Status,Code - Elasticsearch:
ESUser,ESMessage
uuid()- 生成唯一IDverify_code()- 生成验证码read_file()/write_file()- 文件操作serialize()/unserialize()- JSON序列化
// 请求
message UserRegisterReq {
string request_id = 1;
string nickname = 2;
string password = 3;
string phone = 4;
string verify_code = 5;
}
// 响应
message UserRegisterRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
}通过网关 WebSocket 连接发送消息,经由转发服务分发到接收方。
- 在 server/service 创建服务目录
- 编写服务实现代码
- 创建 CMakeLists.txt 和 Dockerfile
- 在
server/CMakeLists.txt添加子模块 - 更新 compose.yaml
Protocol Buffers 定义位于 server/proto,修改后需重新生成代码。
- 使用连接池管理数据库连接
- Redis 缓存热点数据
- Elasticsearch 实现高效搜索
- RabbitMQ 削峰填谷
- Docker 容器化部署
欢迎提交 Issue 和 Pull Request!
MIT License
如有问题或建议,请通过以下方式联系:
- Email: huzch123@gmail.com
- GitHub: huzch