基于WebSocket方案实现QQ群聊天功能
场景:
主要业务:
用户上线,用户下线,发送消息三种不同的业务事件
用户表: 用户id( uid)、 用户名(username)、 昵称(nickname)、 密码(password)、登出时间 (logout_at)
消息表:消息id(mid) 、用户id(uid)、 发送内容(content)、发送时间(published_at)
1.处理用户上线逻辑
1)判断上线的是那个用户
2)将用户信息记录到在线用户列表中(如果多处登录,将之前登录的踢下线)
3)查找历史消息并发送
2.处理用户下线逻辑
1)记录用户下线时间
2)从在线用户列表中,删除该用户
3.处理发来消息的逻辑
1)记录消息(谁发的什么消息)
2)把消息转发给所有在线用户
4.群成员状态更新:轮询模式
MVC分层
endpoint 层 负责WebSocket的接入入口
service 层 负责业务工作
dao 层 负责数据库的处理
usercenter层 管理在线用户
聊天功能的测试用例:
BUG:
- 所有群成员的头像都一致
- 自己发送的消息和其他成员发送的消息在同一侧(左侧)
- 登录/注册时不填写用户名、密码也可以成功
- 密码可以进行暴力破解
- 登录/注册后,不能直接跳转到聊天首页,需要再次输入首页的url,比较麻烦
- 以一秒一次的频率刷新用户在线状态,可能还不够及时