chat聊天系统项目
项目名称:实现一个在线聊天系统?
一、需求
1. 海量用户在线聊天系统;
2. 用户登录注册;
3. 根据用户ID或者Nickname搜索并添加用户;
4. 动态知道好友上下线;
5. 可以创建群并添加好友到群组成员;
6. 可以实现一对多及一对一交流;
7. 可以接收离线消息;
8. 实现客户端甚至实现手机app交流;
二、需求分析设计
设计主要分为三大块:
1. 客户端 2. 服务端 3. 客户端与服务端通信协议
三、服务端开发
1. 用户管理
用户id:数字
用户密码:字母数字组合
用户昵称:用来显示
用户性别:字符串
用户头像:url
用户上线登录时间:字符串
用户是否在线:online
用户信息使用结构体表示:
type User struct { UserId int `json:"user_id"` Passwd string `json:"passwd"` Nick string `json:"nick"` Sex string `json:"sex"` Header string `json:"header"` LastLogin time.Time `json:"last_login"` Status int `json:"status"` }
使用redis的hash表完成用户数据存储:
redis hash: users
key:userId value:序列化 User 结构体
2. 处理用户动作
(1)发送信息
(2)接收信息
3. 用户注册&登录
4. 用户消息离线存储
四、客户端开发
1. 发送用户登录注册请求;
2. 添加好友请求;
3. 发送信息请求;
4. 接收消息请求;
5. 获取用户列表;
五、通信协议
1. 客户端和服务端数据通信协议形式如下:
- 首发送本次通信数据的长度(将数据长度保存到buf[0:4]的数组中)
- 发送序列化的数据(将要发送的数据保存到buf[0:8192]的数组中)
2. 每次发送的的数据为一个序列化为结构体:
type Message struct { Cmd string `json:"cmd"` Data string `json:"data"` }
其中 Cmd:表示此次通信的动作,是登录还是注册等;
Data:表示Cmd动作的数据。
六、代码实现
目前搭建了一个框架,实现了部分功能,后面会持续更新:实现见Github地址:https://github.com/XJL635438451/QQChatProject