# 消息列表实时同步 消息列表以 WebSocket `MESSAGE_PUSH` / `READ_ACK` / 撤回事件为主,合并 180ms 内的刷新请求。连续消息不会一直推迟刷新;同步不会重置列表为骨架屏。 ## 断线恢复 - 收到服务端 `AUTH_ACK` 才认为连接可用。 - 握手 12 秒无响应重连;每 25 秒 PING,10 秒收不到 PONG 或发送失败则重连。 - 断网暂停重试;网络恢复、App 回到前台时重新连接或检测存活。 - 消息列表可见时,正常连接每 15 秒核对一次服务端列表;断线/请求失败时每 5 秒补偿同步。离开页面停止轮询,重进立即同步。 - 同步仅查询会话列表,不拉聊天历史,不上报已读。列表角标与底部角标均使用服务端未读数,自己发送的消息不累计为未读。 - 后台操作系统暂停 App 时不保证 WebSocket 常驻;回来后自动补齐。系统离线推送属于另一个通道。 ## 验证 在 `mobile` 目录运行: ```powershell pnpm test:im pnpm type-check pnpm build:app-plus pnpm build:h5 ``` 跨端联调在 `backend` 目录运行(需要 Node.js、mobile 依赖以及本机 MySQL): ```powershell $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` 产物。构建通过不等于完成真机或线上验证。