技术频道


SSE - Server-Sent Events

SSE 的底层原理是
当浏览器收到带有 Content-Type: text/event-stream 响应头的 HTTP 响应时,它会将响应解析为 SSE 流。
SSE 允许服务器通过单个 HTTP 连接将实时事件(event)流式传输到客户端。也就是说,相当于客户端向服务器发起下载请求,数据不是一次性传输的数据包,而是数据流,不断的传输向客户端,类似于视频下载一样(text/event-stream)。
 

SSE - 使用服务器发送事件:


  • SSE 是使用 http 协议,而 WebSocket 是一种单独的协议
  • SSE 是单向传输,只能服务端向客户端推送,WebSocket 是双向的
  • SSE 支持断点续传,WebSocket 需要自己实现
  • SSE 支持发送自定义类型消息

SSE 服务端返回数据必须包含以下 header

Content-Type: text/event-steam  // 第一行的 Content-Type 必须指定为 text/event-steam
Cache-Control: no-cache
Connection: keep-alive

服务器返回的数据是由若干个的 message 组成,每个 message 用 \n\n 分割(因为是传输的数据格式必须是文本型)。

Content-Type: text/event-stream 响应头告诉浏览器使用 SSE 的协议来解析响应,并按照 SSE 规范处理收到的事件数据。浏览器会将每个事件分解为适当的事件对象,从而能够对其进行处理和展示。
需要注意的是:SSE 是一种单向通信协议,只允许服务器向客户端推送数据,而不支持客户端向服务器发送请求。 因此,SSE 适用于需要服务器主动向客户端推送实时数据的场景,如实时通知、数据更新等 …… 如目前生成式对话 AI - ChatGPT、百度文心一言,字节的豆包等。

 

SSE - Server-Sent Events 扩展阅读: