首页/云/云网络与负载均衡速查/WebSocket 与长连接接入
负载均衡54 条

WebSocket 与长连接接入

WebSocket 在七层监听上需要支持协议升级头透传(多数产品默认支持),同时把连接空闲超时调整到大于静默间隔;应用层心跳依旧是保活与快速感知断链的基础手段。

WebSocket 怎么接入负载均衡

WebSocket 建立在 HTTP 之上,通过 Upgrade 头把连接升级为长连接,因此七层监听需要支持协议升级头的透传(多数产品默认支持)。接入后真正的难点在超时:链路上任意一层的空闲超时都可能先于业务把连接清掉,表现为连接周期性断开。所以配置要点是「超时大于静默间隔,并配合应用层心跳」,两者缺一不可。

基本信息

前提七层监听透传 Upgrade 与 Connection 头
超时空闲超时需大于静默间隔上限,并配合心跳
心跳客户端与服务端定期 ping,防止中间设备清理空闲会话
排查连接周期性断开时,从链路上游逐层核对空闲超时

典型使用场景

  • 在线客服与消息推送:需要服务端主动向客户端推数据
  • 协同编辑与实时看板:长连接承载高频小消息
  • 行情与状态推送:消息间隔不固定,长静默期反而更常见
  • 把长连接服务放到负载均衡后面,便于统一扩容与后端摘除

测试协议升级握手

测试协议升级握手
curl -sv -H 'Connection: Upgrade' -H 'Upgrade: websocket' \
  -H 'Sec-WebSocket-Version: 13' -H 'Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==' \
  http://<LB地址>/ws 2>&1 | grep -i -E 'HTTP/|upgrade'
# 期望看到 101 Switching Protocols

断连排查顺序

环节检查点
客户端是否实现心跳与自动重连
负载均衡空闲超时是否大于心跳间隔
CDN 或 WAF是否支持长连接并放宽超时
后端应用自身连接上限与超时设置
CDN、WAF、负载均衡、接入网关任意一层的空闲超时都可能先清理连接,按链路顺序逐层核对。

扩容时的注意点

长连接会导致流量分布与连接数分布不一致:某台后端可能连着大量空闲连接,却几乎不消耗带宽,扩容时如果只看带宽指标就会判断失误。建议把「活跃连接数」和「平均连接时长」加入监控,缩容前先用连接摘除让存量连接自然结束,而不是直接下线实例;否则大量用户会在同一时刻被动断连并集中重连,形成新的尖峰。

易错点

  • 只调整负载均衡超时,忽略 CDN 或 WAF 层的连接清理
  • 没有应用层心跳,静默连接被中间设备中断
  • 空闲超时小于心跳间隔,心跳还没发出连接就被清理
  • 缩容时直接下线实例,大量长连接同时断开引发重连风暴
  • 只监控带宽不监控活跃连接数,长连接业务的瓶颈判断失真

数据来源与参考

  • 阿里云 CLB WebSocket 文档
  • 腾讯云 CLB WebSocket 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌