服务端向客户端发送消息Server-Sent Events

发布时间 2023-08-23 17:28:29作者: 池月

今天听说了服务端向客户端发消息的一种方式:Server-Sent Events

SSE使用的是HTTP协议,本质上是服务端向客户端发送流式数据。

HTTP不支持服务端向客户端发送请求,但是如果客户端向服务端发出请求后,服务端向客户端声明,接下来的数据是流信息,则连接不会关闭,服务端可以继续发送数据流。

除了IE,浏览器都支持。因为IE一直不支持,所以SSE的应用比较少。不过现在IE已经dead,没有人会再给它眼神。

在浏览器端使用EventSource对象发出请求,服务端用循环或者定时器持续地发送data。具体的代码示例可参考MDN。

chatGPT的实时计算结果就是用SSE实现的,然后前端做一个打字效果。

和WebSocket的比较:

  • SSE 使用 HTTP 协议,现有的服务器软件都支持。WebSocket 是一个独立协议。
  • SSE 属于轻量级,使用简单;WebSocket 协议相对复杂。
  • SSE 默认支持断线重连,WebSocket 需要自己实现。
  • SSE 一般只用来传送文本,二进制数据需要编码后传送,WebSocket 默认支持传送二进制数据。
  • SSE 支持自定义发送的消息类型。

MDN:Using server-sent events  

入门教程:阮一峰Server-Sent Events