用途:为前后端应用加入实时数据同步,支持服务端到客户端单向推送,以及双向通信,并处理断线重连与状态对账。
主要能力:先根据方向、基础设施与部署约束选择传输方式。双向场景(聊天、协作、在线状态)用 WebSocket;仅服务端推送的简单场景用 SSE;Serverless/边缘环境用 SSE;HTTP/1.1 负载均衡且无粘性会话时用 SSE;多后端实例时用 Redis Pub/Sub 作为代理;基础设施受限且可接受轮询时用长轮询而非短轮询。
使用方式:SSE 后端设置 text/event-stream、no-cache、keep-alive 后必须立即调用 res.flushHeaders(),并在 req.on("close") 中清理订阅;前端用 EventSource,浏览器自带指数退避重连,认证通过 cookie 或短期查询令牌传递。WebSocket 在 HTTP upgrade 阶段完成认证,连接后每 30 秒发送 ping 心跳,前端重连采用带抖动的指数退避,关闭码 1000 表示主动关闭不重连。多实例部署时用 Redis Pub/Sub 在各实例间转发消息。重连后可用序列号回放缺失事件,或直接全量重新拉取。
限制:EventSource 不支持自定义请求头;WebSocket 握手完成后无法再用 HTTP 状态码拒绝;NAT 与负载均衡会静默断开空闲连接,心跳为必需;多实例下不接代理会导致消息无法跨实例送达。资料未提供具体收费、平台支持范围与性能基准。