Tech
[Python] Python WebSocket 长连接到底怎么写才稳?
最近在做实时行情相关的项目,刚开始觉得很简单:连上、收消息、处理数据就完事了。结果线上跑几天后发现各种问题:
网络抖动导致连接断开
服务端主动踢连接
长时间没消息被中间设备断开
重连太频繁把自己服务器打挂
后来重新整理了一套比较稳的方案,核心有 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.重连是标配
...
Read the full discussion on V2EX
This article was aggregated from V2EX. Click to join the conversation.
View on V2EX