标准答案

  1. WebSocket 建立持久双向通道,适合聊天室、协作编辑、实时控制和需要客户端频繁发送消息的场景。
  2. SSE 基于普通 HTTP 响应持续向客户端推送文本事件,浏览器原生重连支持较好,适合通知、任务进度、行情和服务端单向更新。
  3. 长轮询让客户端发起请求并等待一段时间,有消息或超时后再返回并立即重连,适合作为简单兼容方案。
  4. 选型还要考虑连接数、代理超时、断线重连、消息顺序、鉴权刷新、背压和水平扩展,不能只比较协议名称。
  5. 实时通道通常只负责传递事件;关键状态仍应能通过普通查询接口恢复,避免客户端断线后数据不可追溯。

题目解析

服务端主动推送不等于所有数据都实时同步。高频事件需要合并、采样或按订阅范围分发,否则连接数和消息风暴会拖垮服务。

SSE 和 WebSocket 都会受到网关空闲超时、负载均衡粘性、发布重启和移动网络切换影响,需要设计可恢复的重连协议。

常见误区

  • 认为 WebSocket 一定比 SSE 更适合所有实时通知。
  • 只实现连接成功,不处理断线重连、重复事件和状态补偿。
  • 让每个连接直接订阅全部业务事件,忽略权限和扇出成本。

作者信息