# im-chat-system **Repository Path**: dengzy321/im-chat-system ## Basic Information - **Project Name**: im-chat-system - **Description**: im聊天系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-08 - **Last Updated**: 2025-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IM 聊天系统开发技术文档(草案) ## 一、项目概述 ### 1.1 项目背景 随着在线沟通需求的激增,构建一个高并发、稳定、安全、可扩展的即时通讯(IM)系统成为众多产品的核心竞争力。本系统旨在为用户提供稳定可靠的单聊、群聊服务,并支持文字、图片、语音、文件等多种消息形式。 ### 1.2 技术目标 - 高并发:支持数万级在线用户并发通信。 - 模块化:前后端解耦,服务高内聚低耦合。 - 可扩展:便于后续接入推送、音视频、客服、消息队列等。 - 安全合规:支持用户鉴权、数据加密、安全审计。 - 跨平台支持:前端支持 Web / H5,可衍生至 App。 ------ ## 二、系统架构 ### 2.1 架构总览 ```bash [用户前端 Vue3] ⇄ [API 网关] ⇄ [认证服务] ⇄ [用户服务] ⇄ [消息服务] ⇄ [会话服务] ⇄ [WebSocket 长连接服务] ⇄ [消息队列(Kafka/NATS)] ⇄ [持久化存储服务(MySQL + Redis + MongoDB)] ``` ### 2.2 网关架构图 ```bash ┌──────────────────────────────┐ │ 前端 Vue3 │ └────────────┬─────────────────┘ │ HTTP/HTTPS 请求 │ ┌────────────▼────────────┐ │ API 网关(Gateway) │ ├─────────────────────────┤ │ - 路由转发(服务发现) │ │ - JWT 鉴权 & 权限控制 │ │ - 接口聚合 │ │ - 日志 & 追踪 │ │ - 限流 & 熔断 │ └────────────┬────────────┘ ┌─────────────────────────────┼─────────────────────────────┐ ▼ ▼ ▼ [认证服务] [用户服务] [消息服务 / 会话服务] ▼ [WebSocket 长连接服务] ▼ [Kafka/NATS 消息队列] ▼ [MySQL / Redis / MongoDB 持久化存储] ``` ### 2.3 技术选型 | 模块 | 技术选型 | | -------- | -------------------------------------------------------- | | 前端 | Vue 3 + TypeScript + Pinia | | UI | Element Plus / Tailwind CSS | | 后端语言 | Go 1.21+ | | 框架 | Gin + Wire + GORM + gRPC | | 长连接 | WebSocket + Redis Pub/Sub | | 消息队列 | Kafka / NATS Streaming | | 数据库 | MySQL(用户/会话),Redis(会话状态),MongoDB(消息体) | | 鉴权 | JWT + OAuth2.0 | | 日志追踪 | zap + OpenTelemetry + Jaeger | | 容器部署 | Docker + Kubernetes + Helm | | API 管理 | APISIX / Kong | ------ ## 三、模块设计 ### 3.1 前端模块设计(Vue 3 + TypeScript) #### 模块划分 - 登录注册模块 - 聊天主界面模块(联系人 / 会话列表) - 消息窗口模块(文字、图片、表情、文件) - 消息状态同步(已读、送达、撤回等) - 消息通知(本地通知、未读数) - 设置模块(账号、隐私、消息偏好) #### 状态管理 - Pinia 模块划分:auth、chat、contacts、settings - WebSocket 管理:封装为 composable,支持自动重连、心跳检测、事件监听 #### 类型定义 - 使用 `interface` 与 `enum` 规范消息结构、用户状态、会话类型等 - 所有接口请求使用 Axios 封装统一处理层 #### UI 设计 - 使用响应式布局,适配桌面及移动端 - 支持夜间模式、主题切换 ------ ### 3.2 后端服务模块设计(重点) IM 后端采用**微服务架构**,每个服务**职责单一、独立部署、易于水平扩展**,并通过 gRPC 进行内部通信,核心服务如下: ------ #### 3.2.1 鉴权服务(Auth Service) **核心职责**:用户身份认证与 Token 管理。 - ✅ 支持注册 / 登录 / 注销 - ✅ JWT + Redis 实现 token 签发与失效控制 - ✅ 提供 OAuth2 扩展能力(接入第三方登录) **关键接口**: | 接口路径 | 功能说明 | | --------------------- | ---------- | | `POST /login` | 用户登录 | | `POST /register` | 用户注册 | | `POST /logout` | 注销登录 | | `POST /refresh_token` | 刷新 Token | **安全机制**: - 支持黑名单机制实现即时 token 作废 - 提供 middleware 校验中间件供其他服务复用 ------ #### 3.2.2 用户服务(User Service) **核心职责**:用户资料管理、好友关系、状态广播。 - ✅ 用户信息增删改查 - ✅ 在线状态同步(Redis 发布状态变更,通知联系人) - ✅ 黑名单机制 / 好友请求处理 **关键接口**: | 接口路径 | 功能说明 | | -------------------- | ------------ | | `GET /user/profile` | 查询用户资料 | | `POST /user/status` | 上报状态 | | `POST /user/block` | 添加黑名单 | | `POST /friend/apply` | 添加好友请求 | **说明**: - 用户状态通过 Redis Pub/Sub 推送至 WebSocket 服务进行广播。 - 用户信息缓存进 Redis 提升查询速度。 ------ #### 3.2.3 会话服务(Session Service) **核心职责**:维护用户的聊天会话列表。 - ✅ 会话创建 / 更新 / 删除 - ✅ 支持单聊与群聊 - ✅ 管理未读数、置顶、清除等状态 **关键接口**: | 接口路径 | 功能说明 | | --------------------- | ------------ | | `GET /session/list` | 获取会话列表 | | `POST /session/start` | 新建会话 | | `POST /session/read` | 清除未读数 | **说明**: - 用户发送消息自动创建会话 - 与消息服务联动同步未读数 ------ #### 3.2.4 消息服务(Message Service) **核心职责**:处理消息分发、存储与回执。 - ✅ 多种消息类型支持(文本 / 图片 / 文件 / 系统) - ✅ 与 Kafka/NATS 集成,异步分发消息 - ✅ MongoDB 存储异构消息体结构 - ✅ 发送方回执、接收方已读机制 **核心流程**: 1. 生产者通过 Kafka 推送消息事件 2. 消息服务消费后进行入库(MongoDB) 3. 通知会话服务更新未读数 4. 将消息发送至接收方 WebSocket 节点 **说明**: - MongoDB 支持灵活的 schema 设计,适合异构消息 - 支持事件持久化,用于审计与检索 ------ #### 3.2.5 WebSocket 网关服务 **核心职责**:管理实时连接与消息推送。 - ✅ 建立长连接、心跳检测、断线重连 - ✅ 用户身份绑定(鉴权后注册连接) - ✅ 多节点通信通过 Redis Pub/Sub 实现 - ✅ 转发消息给在线客户端或缓存离线消息 **功能亮点**: - 客户端连接后,进行身份校验(Token) - 与 Kafka/NATS 解耦,支持消息可靠投递 - 支持连接转移与踢人(多端控制) ------ #### 3.2.6 文件上传服务(File Service,可选) **核心职责**:处理聊天中的文件 / 图片上传。 - ✅ 本地存储或对接对象存储(OSS / MinIO) - ✅ 上传签名预处理,防盗链 - ✅ 回传 CDN 加速访问链接 ------ ## 四、数据库设计(概要) 已完善,无大幅调整。可按业务拆分数据库实例以支持水平扩展。 ------ ## 五、通信协议设计 ### 5.1 WebSocket 消息结构(JSON 协议) ```json { "type": "message", // heartbeat | message | status "data": { "from": "123", "to": "456", "msg_type": "text", "content": "hello", "timestamp": 1690000000 } } ``` ### 5.2 消息类型枚举 - `text`:文本 - `image`:图片 - `file`:文件 - `event`:系统事件(加群/撤回) - `status`:在线状态通知 ------ ## 六、消息流转流程(详细) ```bash sequenceDiagram 用户客户端->>WebSocket服务: 发送消息 WebSocket服务->>Kafka: 发布消息事件 Kafka->>消息服务: 消费并持久化 MongoDB 消息服务->>会话服务: 更新未读数 消息服务->>WebSocket服务: 转发消息给接收方 WebSocket服务->>接收方客户端: 推送消息 ``` ------ ## 七、安全机制 - 所有 API & WebSocket 使用 HTTPS / WSS 加密传输 - Token + Redis 实现状态可控的鉴权机制 - 消息支持端到端加密(E2EE,可选) - 接口签名防止重放攻击 - WebSocket 心跳 + 超时踢出 ------ ## 八、部署运维 ### 8.1 CI/CD - 前端:Vite + GitHub Actions + OSS/CDN 发布 - 后端:Docker + Helm + Kubernetes 滚动更新 - 服务按模块独立容器部署,支持灰度发布 ### 8.2 日志 & 监控 - JSON 结构日志(zap) - Prometheus + Grafana 监控服务状态 / QPS / 错误率 - Jaeger 实现链路追踪与瓶颈定位 ------ ## 九、测试策略 - ✅ 单元测试(覆盖率 > 80%) - ✅ WebSocket 稳定性 / 重连测试 - ✅ 性能压测(Gatling / Locust) - ✅ 端到端测试(Cypress) - ✅ 消息顺序性与一致性验证 ------ ## 十、未来扩展计划 - ✅ 群聊(权限控制、群成员管理) - ✅ 消息撤回 / 阅后即焚 / 历史记录 - ✅ AI 聊天机器人(GPT 接入) - ✅ 语音通话 / 视频会议模块 - ✅ IM 客服系统插件化接入 - ✅ 桌面 / 移动 App 多端同步机制