ICP备案

备案站点的 WebSocket 与长连接网关运维

作者:备案源头内容团队内容审核:备案源头内容团队更新于 2026年9月19日

长连接把「无状态」这个假设直接打破了

普通 HTTP 接口天然适合水平扩展:请求进来,随便挑一个实例处理,处理完就完事,实例之间互不相干。WebSocket 一旦建立,就和某一个具体的服务实例绑定在了一起——这个连接后续所有的消息收发,都必须经过当初接受它的那台实例。这个差异看起来很小,却让长连接网关的运维和普通 Web 服务完全是两套逻辑。

关键要点

  • 长连接一旦建立就与具体实例绑定,负载均衡策略必须支持会话保持,普通的轮询策略会打断连接。
  • 网关重启或扩缩容会导致连接批量断开,客户端集中在同一时刻重连,形成重连风暴,可能瞬间打垮后端。
  • 心跳机制既是保活手段也是负担来源,心跳间隔和超时判定需要在及时发现断连与避免误判之间找平衡。
  • 给一个用户推送一条消息,在多实例架构下需要先找到这个用户的连接落在哪台实例上,这是长连接网关特有的路由问题。

连接状态:水平扩展的第一道坎

架构方式 做法 代价
会话保持 负载均衡按客户端标识固定路由到同一实例 单实例故障时,该实例上所有连接都要重连
连接信息集中存储 各实例把「哪个用户连在哪」写入共享存储 每次收发消息都要多一次查询,见 缓存与 Redis 运维
消息总线广播 消息发给所有实例,只有持有对应连接的实例真正推送 消息量随实例数放大,代价随规模增长

多数系统会把后两者结合:用共享存储记录连接位置做精确路由,用消息总线处理广播类消息。这里最容易被忽视的一点是:这套连接位置的映射关系,其解决的问题和普通的服务发现有相似之处(都是"去哪找目标"),但粒度更细——不是找到一个服务实例,而是要找到"某个具体用户的连接在哪台实例上",服务发现层面的原理见 服务发现与注册中心运维

心跳:保活手段,也是负担

WebSocket 连接经过的中间设备(负载均衡、NAT 网关、防火墙)通常对空闲连接有超时限制,超时后会静默断开连接而不通知任何一方——这一点和普通 TCP 长连接的坑完全一致,见 TCP 连接排障与内核参数调优。心跳机制的作用就是定期发送小包,防止连接被中间设备判定为空闲。

心跳间隔的设置是一个直接的权衡:

  • 间隔太短:几万甚至更多连接同时定期发心跳,会给网关和后端带来持续的额外负担,纯粹的心跳流量可能比业务流量还大。
  • 间隔太长:真正断开的连接要等更久才能被发现,客户端和服务端可能在一段时间内都误以为连接还活着,消息发送后石沉大海却没有任何错误反馈。

一个常被忽略的细节是:心跳超时的判定应该允许一定的容忍次数(比如连续错过若干次心跳才判定断开),而不是一次超时就立即断开——网络的短暂抖动是常态,过于敏感的判定会导致大量本可以恢复的连接被误杀。

重连风暴:网关重启的隐藏代价

网关实例重启、发布或扩缩容,都会导致这台实例上的所有连接同时断开。客户端检测到断开后,通常会立即发起重连——如果没有额外处理,几万个客户端会在几乎同一时刻集中涌向剩余实例或新实例,形成瞬时的连接建立洪峰,这类似于普通服务重启后的惊群问题,但长连接场景下峰值更集中、影响面更大。

对策上和普通重试风暴的思路一致,都是打散集中的时间点

  • 客户端重连前加入随机延迟,避免所有客户端在同一毫秒发起重连,重试退避的通用做法见 超时设置与重试策略
  • 网关滚动重启时,逐个实例小批量重启并预留足够的间隔,让每一批断开的连接有时间完成重连、系统恢复稳定后再重启下一批,避免同时冲击。
  • 新实例上线后要有预热和逐步放量的过程,而不是让所有重连请求瞬间涌向刚启动的实例,灰度放量的思路见 灰度发布与蓝绿部署
  • 网关自身要对新建连接做限流,即便重连风暴发生,也不至于把后端资源瞬间耗尽,见 限流、熔断与服务降级

消息广播:扇出成本随规模非线性增长

需要给大量在线用户推送同一条消息(系统公告、直播弹幕类场景)时,朴素的做法是遍历所有连接逐个发送。这在连接数不大时没问题,但扇出的消息总量是连接数乘以消息数,规模上来后会迅速成为瓶颈。

优化方向:

  • 把广播消息的分发和实际的连接推送解耦,用消息队列做中间缓冲,见 消息队列与异步任务运维
  • 按房间、频道等维度对连接分组,广播时只扇出到订阅了该分组的连接,而不是全量遍历。
  • 高频更新的场景(比如实时数据流)考虑合并短时间内的多次更新,按固定节奏批量推送,而不是每次变化都立即推送一次。

优雅停机:长连接场景下更复杂的一步

普通 HTTP 服务的优雅停机是等待在途请求处理完,见 优雅停机与健康检查。长连接场景下多了一层复杂度:连接本身可能长期空闲、没有"在途请求"这个概念,不能简单套用"等请求处理完再关闭"的逻辑。

更合适的做法是:先停止在负载均衡上接收新连接,主动通知已连接的客户端"即将断开,请重连"并给出一个合理的等待窗口,让客户端能主动、有序地发起重连而不是被动检测到连接异常断开后再重连——主动通知的重连通常比被动检测的重连更分散,能有效缓解重连风暴。

常见坑

  • 用普通轮询负载均衡策略处理长连接:连接被随机分配、随后又被切断,客户端反复重连。
  • 心跳间隔设置一刀切:没有考虑不同网络环境下中间设备超时时间的差异。
  • 网关批量重启不分批:一次性重启导致全量连接同时断开,引发重连风暴。
  • 广播消息全量遍历所有连接:连接数增长后,一次广播的耗时线性甚至更快地增长。
  • 停机前不通知客户端:客户端只能靠被动检测断连,重连时间点高度集中。

常见问题

长连接网关需要单独的一套监控吗?

需要至少补充几项长连接特有的指标:当前在线连接数、连接建立速率、心跳失败率、单实例平均连接时长。这些指标能提前发现异常波动,普通的 HTTP 请求成功率和延迟指标覆盖不到这一层,指标体系搭建见 可观测性建设

重连风暴发生后,怎么快速缓解?

优先在网关入口对新建连接做限流,把瞬时洪峰削平成后端能承受的速率,即使部分客户端要多等待一会儿才能重连成功,也好过后端被直接打垮导致所有人都连不上。

心跳超时后应该立即断开连接吗?

不建议一次超时就断开。更稳妥的做法是允许连续错过一定次数心跳才判定为真正断连,给短暂的网络抖动留出恢复空间,避免把本可以自愈的连接问题升级成一次不必要的重连。

广播一条消息给所有在线用户,最简单可靠的方式是什么?

规模不大时,直接遍历本实例持有的连接逐个发送即可。规模变大后,应该引入消息队列做分发缓冲,并按业务维度(房间、频道)对连接分组,避免每次广播都要触达全部连接。

资料来源

WebSocket 协议的公开标准文档,主流实时通信网关与消息推送系统的公开架构实践资料,以及负载均衡会话保持相关的通用技术文档。本文为通用运维说明,仅供参考,具体方案请结合连接规模与业务场景设计。

相关阅读

网站访问日志留存与安全合规运维要点

为什么要留日志:这是法定要求 《网络安全法》第二十一条明确要求网络运营者"采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月"。已完成备案、对外提供服务的网站属于网络运营者范畴,日志留存不是可选项,而是基础合规义务。 应留存哪些日志 | 日志类型 | 记录内容 | 主要用途 …

网站新增域名如何补充接入备案

企业在原有网站基础上新增域名,比如启用新的品牌域名或拼音域名指向同一网站时,不能直接绑定使用,而是需要在原备案基础上补充办理新增域名的接入手续。 新增域名前的准备工作 新增域名前,建议先确认该域名已经完成实名认证,可以通过 Whois查询 核对域名的注册信息和实名状态,避免因域名信息未实名导致接入申请被退回。同时确认…

备案信息年度核查该如何配合应对

部分省份的通信管理部门会对辖区内已备案网站开展年度或不定期核查,核查方式包括系统比对、电话回访、短信确认等,目的是确认备案信息与网站实际运营情况是否一致。 核查通常关注哪些内容 年度核查一般围绕主体信息、网站信息、接入信息三个维度展开,具体可以对照下表自查: | 核查维度 | 常见核查点 | | --- | --- …

备案号在网站上的规范展示与使用要求

网站完成备案只是第一步,备案号在页面上的展示方式同样需要长期维护,很多主体正是因为展示细节不规范,在日常巡查或年度核查中被要求整改。 展示位置与基本要求 通常做法是将备案号放置在网站首页底部,文字需清晰可辨、不被图片或广告遮挡,且格式应与下发的备案号文本保持一致,不能随意增减字符或调整顺序。是否需要加超链接指向查询入…

备案注销之后重新申请要注意什么

有些主体在此前因业务调整、接入商变更等原因注销了原有备案,之后又因新的业务需要重新申请备案。这种“二次备案”与首次备案在流程上大体相似,但有几个环节容易被忽略。 重新申请前的自查 重新申请前,建议先用 ICP备案查询 确认原备案是否确实已经完成注销,避免出现原备案未彻底清空、新申请与旧记录冲突的情况。同时检查计划使用…

备案信息变更有没有时效要求

备案不是办理完成后就一劳永逸的事项,主体信息、网站信息或联系方式一旦发生变化,通常需要在信息变化后的一定时间内完成变更提交,具体时限以属地管局要求为准。 哪些变化需要及时申报 常见需要变更的情形包括:主办单位名称或证件信息变化、网站负责人更换、联系电话或邮箱失效、网站域名调整、网站内容服务类型发生实质变化等。这类变更…

公司迁址之后备案地址信息如何更新

企业办公地址或注册地址发生变化后,备案信息中登记的地址项也需要相应更新,尤其是当迁址涉及跨区、跨市甚至跨省时,办理流程会比同城内迁址更复杂一些。 迁址后需要关注的信息 迁址后首先要确认工商登记信息是否已经完成同步变更,备案地址一般以工商登记的最新地址为准。可以先用 ICP备案查询 查看当前登记的主办单位地址,与最新的…

备案预留手机号邮箱变更该如何更新

备案信息中登记的手机号和邮箱,是管局与接入服务商联系网站负责人的主要渠道,用于发送核查通知、验证短信、审核结果等重要信息。这些联系方式一旦更换却未同步更新,容易导致关键通知被漏收。 常见需要更新的场景 负责人更换手机号或离职导致原号码停用; 企业邮箱系统迁移,原邮箱地址不再使用; 备案负责人变更,联系方式随之更换。 …

系统学习