Files
2026-09-03 08:38:17 +08:00

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 产物。构建通过不等于完成真机或线上验证。