理解 Server Sent Events
想象一下你在使用 ChatGPT。你提出了一个问题。你看到的不是文字逐个跳出,而是需要等待 5 秒钟,整个答案才一次性全部显示出来。
这种延迟感让人觉得很慢,也很令人沮丧。
为了解决这个问题,开发者使用了流式响应(streaming responses)。这让用户体验感觉非常流畅。
Server Sent Events (SSE) 让这一切成为可能。
什么是 SSE? SSE 是一种通过 HTTP 从服务器向客户端流式传输数据的标准。它允许服务器实时向你推送更新。
工作原理:
服务器发送小的文本块。这些块使用 data、event、id 和 retry 等字段。每个数据块之间用一个空行分隔。
示例:
data: {"name": "Portal Gun", "price": 999.99}
SSE 的常见用途:
- AI 对话流式传输
- 实时通知
- 实时日志
- 系统可观测性
在 SSE 出现之前,开发者主要使用两种方法来获取更新:
短轮询 (Short polling) 客户端向服务器请求数据。如果数据尚未准备好,服务器会发送一条等待消息。客户端等待一段时间后再次请求。这个过程会不断重复,直到任务完成。
长轮询 (Long polling) 客户端向服务器请求数据。服务器会保持该请求处于开启状态,直到数据准备就绪或发生超时。客户端在收到响应后必须立即重新发起请求。
事件流用于处理连续的过程。这些过程遵循特定的顺序。这包括像创建 PDF 这样简单的任务,或者像银行转账这样复杂的任务。
服务器与客户端建立一个通信通道。它会保持该通道开启,直到整个过程结束。
出处:https://dev.to/rishini_dharan_t/understanding-server-sent-events-3mkd