前言
最近项目中需要实现聊天系统,计划借助 AI 辅助进行开发。本文介绍使用 AI 辅助开发的一些心得及完整过程。
后端:Claude Code 前端:Gemini
一、架构设计
在设计 IM 系统时,核心目标是实时性、可靠性、可扩展性。经过与 AI 交互探讨,最终采用 HTTP + WebSocket + Redis 的混合架构。
1.1 核心设计
- WebSocket 模块:负责建立长连接,实现双向实时通信。
- 消息中台 (ChatHub):负责所有连接的管理(注册/注销)、心跳检测、以及跨实例的消息分发。
- 消息流转模型
- 持久化消息:用户通过 HTTP 发送消息 -> 存入数据库 -> 推送至 Hub -> 转发给接收者。
- 瞬时事件:如'正在输入 (TYPING)',不经过数据库,直接通过 WebSocket 广播转发。
- 分布式方案:利用 Redis Pub/Sub 实现跨服务器实例的消息分发。当用户连接在不同服务器上时,Redis 确保消息能够准确投递。
二、技术选型
| 维度 | 选型 | 理由 |
|---|---|---|
| 开发语言 | Go (Golang) | 并发性能强,原生支持 Goroutine,非常适合处理高并发长连接。 |
| Web 框架 | Gin | 轻量、高效,路由性能卓越。 |
| 长连接库 | Gorilla WebSocket | Go 社区最成熟、性能最稳定的 WebSocket 库。 |
| 存储层 | MySQL (GORM) | 消息的可靠持久化,支持复杂的关联查询(如会话列表、成员权限)。 |
| 缓存/发布订阅 | Redis | 实现用户在线状态追踪、分布式消息同步(Pub/Sub)。 |
三、实施方案与核心代码落地
3.1 核心数据模型 (Model)
IM 系统的基础是会话(Conversation)和消息(Message),以下是部分数据模型设计。
// Conversation 会话模型
type Conversation struct {
Base
Type string `gorm:"type:varchar(20);not null" json:"type"` // private, group
Name string `gorm:"type:varchar(100)" json:"name"`
Avatar string `gorm:"type:varchar(255)" json:"avatar"`
CreatorID uint `json:"creatorId"`
Members []ConversationMember `json:"members,omitempty"`
}
Message {
Base
ConversationID
SenderID
Sender User
Type
Content
IsRead
}


