标准答案
- WebSocket 建立持久双向通道,适合聊天室、协作编辑、实时控制和需要客户端频繁发送消息的场景。
- SSE 基于普通 HTTP 响应持续向客户端推送文本事件,浏览器原生重连支持较好,适合通知、任务进度、行情和服务端单向更新。
- 长轮询让客户端发起请求并等待一段时间,有消息或超时后再返回并立即重连,适合作为简单兼容方案。
- 选型还要考虑连接数、代理超时、断线重连、消息顺序、鉴权刷新、背压和水平扩展,不能只比较协议名称。
- 实时通道通常只负责传递事件;关键状态仍应能通过普通查询接口恢复,避免客户端断线后数据不可追溯。
题目解析
服务端主动推送不等于所有数据都实时同步。高频事件需要合并、采样或按订阅范围分发,否则连接数和消息风暴会拖垮服务。
SSE 和 WebSocket 都会受到网关空闲超时、负载均衡粘性、发布重启和移动网络切换影响,需要设计可恢复的重连协议。
常见误区
- 认为 WebSocket 一定比 SSE 更适合所有实时通知。
- 只实现连接成功,不处理断线重连、重复事件和状态补偿。
- 让每个连接直接订阅全部业务事件,忽略权限和扇出成本。