常见问题 FAQ
Q1: 如何判断消息是否发送成功?
A: 通过 WebSocket 发送后,等待服务器返回 cmd: 2 (SUCCEED) 响应。通过 HTTP API 发送,根据返回值判断。
Q2: 离线消息会丢失吗?
A: 不会。用户离线时消息会存入 Redis 队列(保留7天,最多1000条),上线后自动推送。
Q3: 撤回消息后对方还能看到吗?
A: 不能。撤回后会实时通知对方,前端需更新 UI 显示"撤回了一条消息"。
Q4: 如何实现"正在输入..."功能?
A: 可通过 WebSocket 发送自定义 cmd,如 typing_status,告知对方正在输入。
Q5: 支持图片、视频、文件发送吗?
A: 支持。先上传文件到 OSS,然后发送消息时 contentType 设为 image/video/file,content 填写文件 URL。
Q6: 如何实现消息@功能?
A: 在消息 extra 字段中存储被@用户的ID列表,前端解析并高亮显示。
16. 测试建议
16.1 功能测试清单
- [ ] WebSocket 连接建立
- [ ] 心跳保活机制
- [ ] 自动重连机制
- [ ] 私聊消息发送与接收
- [ ] 群聊消息发送与接收
- [ ] 消息撤回(2分钟内)
- [ ] 消息撤回(超时失败)
- [ ] 已读未读状态同步
- [ ] 未读消息数统计
- [ ] 会话列表按置顶排序
- [ ] 会话免打扰
- [ ] 离线消息存储
- [ ] 离线消息上线推送
- [ ] 多设备同时在线
- [ ] Token 过期处理
16.2 性能测试
- 1000 用户同时在线
- 高频消息发送(100条/秒)
- 长时间连接稳定性(24小时)
- 内存泄漏检测
17. 版本更新记录
v2.0 (2025-01-22)
✨ 新增功能
- 消息撤回(2分钟内)
- 已读/未读状态管理
- 已读回执通知
- 会话置顶功能
- 会话免打扰
- 离线消息存储与推送
- 批量标记已读
- 未读消息数统计
🔧 优化改进
- 修复线程安全问题
- Redis 缓存添加过期时间
- 消息持久化优化
- 虚拟线程支持
v1.0 (2025-01-19)
- 基础 WebSocket 通信
- 私聊、群聊、广播
- 心跳保活
- 消息持久化
