优化SSE并发需复用单连接承载多会话并启用HTTP/2:服务端统一分配Session-ID,前端所有订阅共用一个EventSource;HTTP/2多路复用替代HTTP/1.1的6连接硬限;配合连接生命周期管理、错误降级与断点续传。

浏览器对同域名的并发连接数有硬性限制(通常为6个),而SSE本质是HTTP长连接,会持续占用一个连接槽位。若页面同时开启多个SSE连接(比如多标签页、多模块订阅),极易触达上限,导致新请求排队、阻塞甚至失败。优化核心不是“绕开限制”,而是让有限连接承载更多有效数据流。
复用单连接承载多会话
避免每个业务逻辑都建独立SSE连接。服务端生成唯一Session-ID,前端所有订阅(如消息通知、AI输出、任务进度)统一走同一个EventSource连接。服务端按ID区分数据流,客户端用event类型或data字段中的标识做路由。这样1个连接可支撑5–8个逻辑会话,实测连接数降低60%。
优先使用HTTP/2协议栈
HTTP/1.1下,同域名6连接是硬瓶颈;HTTP/2支持多路复用,单TCP连接可并发传输多个SSE流。确保服务器启用HTTP/2(Nginx 1.9.5+、Apache 2.4.17+、Node.js 9.0+原生支持),并验证响应头含h2协议标识。此时浏览器不再按“连接数”计数,而是按“流数”管理,彻底规避域名级并发限制。
合理控制客户端连接生命周期
- 页面不可见时(
document.hidden === true),调用eventSource.close()释放连接;切回前台再重建,避免后台闲置连接长期占位 - 对非关键订阅(如低频日志),设置超时自动关闭:监听
error事件后3秒无重连则主动销毁实例 - 避免在React/Vue组件重复挂载时未清理旧连接——每次
new EventSource前务必先.close()已存在的实例
兜底降级与错误恢复
当检测到连接失败或重连超限(如连续3次onerror),暂停自动重试,改用短轮询(间隔5–10秒)拉取一次快照数据,并提示用户“网络恢复中”。服务端配合返回Last-Event-ID头,客户端重连时带上该ID,服务端从断点续推,避免重复或丢失。
立即学习“Java免费学习笔记(深入)”;


















