返回文章列表
前端架构SSEWebSocketPolling长任务

前端如何处理长任务:SSE、WebSocket 与轮询的工程选型对比

AI 与 Agent 场景里,长任务反馈链路决定用户体验与系统成本。本文从连接模型、重连语义、一致性策略、网关兼容、移动端表现与运维复杂度六个维度,对比 SSE、WebSocket、Polling 的真实取舍,并给出可执行的选型决策树。

2026年3月5日
Synthly 团队
预计阅读 15 分钟
长任务通信机制对比图:SSE、WebSocket 与轮询在时延和复杂度上的权衡

📷 Photo by Brett Sayles via Pexels

一、长任务通信不是“实时不实时”,而是“一致不一致”

很多团队把问题简化成:

  • WebSocket 更实时
  • SSE 更简单
  • 轮询更土

真正上线后,你会发现核心不是“实时感”,而是“状态一致性”与“恢复能力”:

  • 断线后如何补事件?
  • 网关超时后如何恢复?
  • 移动端后台回来是否能追平进度?

通信方式只是手段,任务状态一致才是目标。


二、三种机制的能力边界

SSE(Server-Sent Events)

适合:服务端单向连续推送(token、步骤进展)

优点:

  • 浏览器原生 EventSource
  • 语义清晰,调试成本低
  • 与“流式输出”天然匹配

限制:

  • 主要单向通信
  • 部分网关/代理默认超时配置敏感

WebSocket

适合:高频双向交互、房间协作、多事件并发

优点:

  • 双向低延迟
  • 事件类型扩展灵活

限制:

  • 连接管理、心跳、重连复杂
  • 基础设施运维门槛更高

Polling

适合:低频状态刷新、兜底通道

优点:

  • 实现与兼容性最好
  • 容易接入现有 API 网关

限制:

  • 无法提供细粒度实时体验
  • 频率过高会放大后端压力

三、决策树:如何做“够用且稳”的选型

可以用四个问题快速判断:

  1. 是否需要高频双向交互?
    • 是:优先 WebSocket
    • 否:看 2
  2. 是否主要是服务端推送进展?
    • 是:优先 SSE
    • 否:看 3
  3. 实时性要求是否低于 3-5 秒?
    • 是:Polling 可接受
    • 否:SSE/WebSocket
  4. 基础设施是否已具备 WS 观测与治理能力?
    • 没有:先 SSE + Polling fallback

多数 AI 产品初期最稳方案是:SSE 主通道 + Polling 兜底


四、重连与补拉:决定线上口碑的关键细节

不论用哪种机制,都建议统一这套协议策略:

  • 每个事件带 sequence
  • 客户端记录 lastAckSequence
  • 重连时携带 since=lastAckSequence
  • 服务端返回缺失事件或任务快照

这样可以避免两类高频事故:

  • 进度倒退
  • 关键步骤“看不到但其实执行了”

五、UI 层一致性:别让展示逻辑反噬通信层

前端建议遵循:

  • 事件入 store,再派生 UI
  • UI 状态不可直接覆盖,只能由事件推进
  • 任务终态(成功/失败/取消)不可被旧事件回滚

这能显著降低乱序事件导致的闪烁与误判。

与控制台设计可联动阅读:


六、生产建议:分阶段演进,而不是一次到位

阶段 1:SSE + Polling fallback

  • 满足大多数单向长任务
  • 成本低、排障快

阶段 2:补全重连与补拉协议

  • 引入序号、快照、追平机制

阶段 3:局部引入 WebSocket

  • 仅在高频双向场景(协作编辑、实时多人控制)启用

这样可以避免“为未来扩展过早复杂化”。

更多工程内容见 /articles,也可在 /apps/new 体验实时任务反馈。