1.9 KiB
1.9 KiB
消息列表实时同步
消息列表以 WebSocket MESSAGE_PUSH / READ_ACK / 撤回事件为主,合并 180ms 内的刷新请求。连续消息不会一直推迟刷新;同步不会重置列表为骨架屏。
断线恢复
- 收到服务端
AUTH_ACK才认为连接可用。 - 握手 12 秒无响应重连;每 25 秒 PING,10 秒收不到 PONG 或发送失败则重连。
- 断网暂停重试;网络恢复、App 回到前台时重新连接或检测存活。
- 消息列表可见时,正常连接每 15 秒核对一次服务端列表;断线/请求失败时每 5 秒补偿同步。离开页面停止轮询,重进立即同步。
- 同步仅查询会话列表,不拉聊天历史,不上报已读。列表角标与底部角标均使用服务端未读数,自己发送的消息不累计为未读。
- 后台操作系统暂停 App 时不保证 WebSocket 常驻;回来后自动补齐。系统离线推送属于另一个通道。
验证
在 mobile 目录运行:
pnpm test:im
pnpm type-check
pnpm build:app-plus
pnpm build:h5
跨端联调在 backend 目录运行(需要 Node.js、mobile 依赖以及本机 MySQL):
$env:IM_TEST_MYSQL_DSN='root:你的本机测试密码@tcp(127.0.0.1:3306)/?charset=utf8mb4'
go test ./internal/app -run 'TestIMRealtimeClientMySQL|TestIMUnreadMySQL' -count=1 -v
联调只接受不带数据库名的本机连接,自动创建独立临时库并清理,不写业务 IM 库。使用真实 Go 路由、JWT、MySQL、HTTP/WebSocket 和客户端页面代码;覆盖新会话、排序、重复发送、自己的回声、断线补偿、前后台恢复和心跳。
更新 App
这次修改在客户端,未修改生产后端配置或数据库。已有 APK 不会自动获得源代码修复:使用 HBuilderX 重新运行到设备或云打包后安装新版;H5 需要发布新的 dist/build/h5 产物。构建通过不等于完成真机或线上验证。