最近在做实时行情相关的项目,刚开始觉得很简单:连上、收消息、处理数据就完事了。结果线上跑几天后发现各种问题: 网络抖动导致连接断开 服务端主动踢连接 长时间没消息被中间设备断开 重连太频繁把自己服务器打挂 后来重新整理了一套比较稳的方案,核心有 3 个: 心跳 重连 退避机制 1.心跳不能省 WebSocket 建立连接不一定就一直在线。运营商网络、NAT 设备、负载均衡器都可能清理长时间无流量的连接。所以一定要做心跳。 如果服务端支持 ping/pong ,直接使用协议层心跳即可。 如果不支持,可以定时发送业务心跳消息。 例如: async def heartbeat(ws):     while True:         try:             await ws.ping()             await asyncio.sleep(30)         except Exception:             break 30 秒左右发一次通常就够用了。 2.重连是标配 ...