用 Server-Sent Events 在服务器上 Push 消息

介绍

在前端开发中,有时候需要从服务器实时获取数据并更新页面。传统的方式是使用轮询或者 WebSocket。但是,这些方法都有一些缺点,比如轮询会浪费带宽和服务器资源,而 WebSocket 需要双向通信,增加了复杂性。

而 Server-Sent Events(SSE)则是一种轻量级、简单易用的技术,可以在服务器上 Push 消息到客户端。SSE 只需要单向通信,可以减少服务器和客户端的负担,同时也可以减少网络流量。

SSE 的工作原理

SSE 的工作原理非常简单。客户端通过 HTTP 连接服务器,并发送一个特殊的请求头 Accept: text/event-stream。服务器收到请求后,会不断向客户端发送数据,每个数据包都有一个特殊的格式,如下所示:

每个数据包由两个部分组成:

  • event:事件类型,可以是任意字符串,用于标识不同的事件。
  • data:数据部分,可以是任意格式的数据,比如字符串、JSON 等。

客户端收到数据后,可以通过 JavaScript 代码进行处理,比如更新页面内容、播放音频等。

SSE 的优点

相比于传统的轮询和 WebSocket,SSE 有以下优点:

  • 简单易用:SSE 只需要单向通信,不需要双向通信,减少了复杂性。
  • 轻量级:SSE 只需要使用 HTTP 协议,不需要额外的握手和协议,可以减少网络流量。
  • 实时性:SSE 可以实现实时更新数据,比轮询更及时,比 WebSocket 更简单。
  • 兼容性:SSE 可以在所有现代浏览器中使用,不需要额外的库或插件。

示例代码

下面是一个使用 SSE 的示例代码。

服务器端代码

以上代码演示了一个简单的 SSE 服务器,每秒钟向客户端发送当前时间。当客户端访问根路径时,会返回一个 HTML 页面,页面中通过 JavaScript 代码创建了一个 EventSource 对象,监听服务器发送的 message 事件,当事件触发时,更新页面上的消息内容。

客户端代码

以上代码演示了一个简单的 SSE 客户端,通过创建一个 EventSource 对象,监听服务器发送的 message 事件,当事件触发时,更新页面上的消息内容。

总结

本文介绍了 Server-Sent Events 技术,包括工作原理、优点和示例代码。SSE 是一种轻量级、简单易用的技术,可以在服务器上 Push 消息到客户端,实现实时更新数据,减少网络流量和服务器负担。SSE 可以在所有现代浏览器中使用,是一种值得掌握的前端技术。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6567ddedd2f5e1655d0af712


纠错
反馈