SpringBoot + WebSocket 弱网保活机制:App 切后台断线重连,消息精准补发不丢失!
做过 IM 聊天、在线游戏、实时推送这类应用的都知道,WebSocket 连接稳定性是个大难题: 用户坐地铁过隧道,信号时断时续 App 切到后台,系统会杀掉 WebSocket 连接 公司网络需要认证,一断开就再也连不上 用户 Dormant 模式网络切换,IP 都变了 更头疼的是消息丢失问题: 用户发了一条消息,服务器还没收到就断线了 服务器推送的消息,客户端还没收到就断线了 重连后不知道哪些消息漏收了,只能全部同步 今天我们来聊聊 WebSocket 弱网环境下的保活机制,确保 App 在各种网络环境下都能保持连接,消息不丢失。 为什么 WebSocket 在弱网环境下这么脆弱? 先来分析一下 WebSocket 连接断线的常见场景: 1. App 切后台 前台运行:WebSocket 保持连接 ←→ 服务器正常通信 ↓ 切到后台:系统可能 kill WebSocket 连接 ↓ 切回前台:需要重新建立连接,但之前的消息已经丢了 2. 网络切换 WiFi 连接:WebSocket 通过 IP1 建立连接 ↓ 切换到 4G:IP 变成 IP2,原有连接直接失效 ↓ 重连成....