标准答案
- SSE 适合浏览器发起一次请求后由服务端单向推送文本和事件,流式回答实现简单;它需要处理代理缓冲、连接超时和重连。
- WebSocket 适合双向实时协作、客户端持续发送控制事件或多人共享状态,但连接管理、扩缩容和鉴权更复杂。
- 轮询或长轮询适合后台任务状态、弱网和不方便保持长连接的环境;可用指数退避和版本号避免重复请求。
题目解析
协议不能替代任务模型。长任务应先有任务 ID 和状态查询,即使实时通道断开也能恢复;SSE 只负责传递事件,不应成为唯一事实来源。
移动网络和企业代理可能中断长连接。生产系统要设置心跳、重连、Last-Event-ID 或服务端事件序号,并防止重复渲染。
WebSocket 的双向能力不代表应该让客户端任意控制 Agent。每个控制事件仍需服务端校验会话和权限。
常见误区
- 认为 WebSocket 一定比 SSE 更快或更高级。
- 没有任务状态接口,连接一断就丢失生成结果。
- 重连后从头消费事件,造成文本重复。