使用 SSE 推送消息到客户端的 Node.js 实现方法

阅读时长 3 分钟读完

Server-Sent Events(SSE)是一种 HTML5 技术,允许服务器向客户端(通常是浏览器)推送数据。SSE 是一种轻量级的数据推送机制,不需要客户端像 WebSocket 那样实现复杂的协议,比传统的 AJAX 轮询更加高效。

本文将介绍如何在 Node.js 应用程序中实现 SSE 并向客户端推送数据。我们将演示一个使用 Express 和 Node.js 原生 HTTP 模块创建的简单实现。

基础准备

在使用 SSE 前,需要在客户端打开一个 EventSource 对象,该对象就像一个 HTTP 连接,接收持久性的服务器推送事件流。 EventSource 构造函数接收一个 URL,用于建立与服务器的连接。

服务端实现

服务端实现简单,我们创建一个路由处理程序,用于处理客户端 SSE 连接,并向客户端发送事件流。

-- -------------------- ---- -------
----- ------- - -------------------
----- ------ - -----------------

--------------------- ------------- ---- ----- -
  -- -- --- ---
  ----------------------------- ---------------------
  ------------------------------ ------------
  --------------------------- --------------

  -- ------------------
  ----------------

  -- - - -----------
  ----- ------ - -------------- -- -
    ---------------- - - --- -------------------- - --------
  -- ------

  -- -- --- --
  --------------- -- -- -
    ----------------------
    ----------
  ---
---

-------------- - -------

服务端路由处理程序会向客户端发送 SSE 事件流,使用 SSE 的主要标志是响应的 Content-Type:text/event-stream。

通过设置 SSE 的消息头信息,我们告诉客户端连接类型、缓存策略和连接类型。然后我们发送一个空行,以保证连接开始。客户端与服务器建立连接后,就可以接收到服务器推送的事件流。

在 setInterval 中,每 5 秒发送一次事件流到客户端。注意每个数据行用\n\n分隔。

当客户端关闭连接时,通过监听 req 的 close 事件,我们销毁对应的 SSE 连接。

客户端实现

在客户端打开 EventSource 对象之后,我们需要监听 onmessage 事件以接收来自服务器的事件流。

在这个简单的示例中,我们使用 console.log 来输出来自服务器的消息。

总结

SSE 提供了一种简单、轻量级的数据推送机制,可以方便地向客户端推送事件流。本文演示了如何在 Node.js 应用程序中实现 SSE,以及如何在客户端使用 EventSource 监听服务器推送的事件流。在实际项目中,您可以使用 SSE 为客户端提供实时数据更新,带来更好的用户体验。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fad40df6b2d6eab319fd8f

纠错
反馈