如何使用 Node.js 和 SSE 实现实时消息推送?

在现代 Web 应用程序中,实时消息推送变得越来越常见。 SSE 技术(Server-Sent Events)是一种强大的工具,可以帮助您实现这种功能。本文将向您介绍如何使用 Node.js 和 SSE 实现实时消息推送。

SSE 是什么?

SSE 是一种单向通信机制,用于将服务器推送到客户端的消息。与 WebSockets 不同,SSE 仅支持服务器到客户端的通信,而不支持反向通信。

SSE 消息可以是任何文本,可以是 JSON、XML 或 HTML。服务器推送的每个消息都是单独的文本块,并以换行符分隔。

实现基本 SSE 服务器

首先,让我们来看看如何使用 Node.js 创建 SSE 服务器。

安装必需的软件包

使用以下命令安装必需的软件包:

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

创建 Express 应用程序

在项目根目录下创建一个名为 app.js 的文件,并加入以下代码:

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

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

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

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

这将创建一个基本的 Express 应用程序,并监听在 3000 端口上。如果您在本地运行此应用程序,请访问 http://localhost:3000/events

调试 SSE 服务器

使用 Chrome 浏览器的调试工具检查 SSE 连接。

在 Chrome 浏览器中访问 http://localhost:3000/events。您将看到该页面始终保持活动状态,并且每秒都会收到一条新消息。此页面实际上是 SSE 连接的客户端。在 Chrome 的开发者工具中切换到 Network 标签页,您会看到一个名为 events 的请求。单击该请求,然后切换到 Response 标签页。您应该能够看到类似以下的 JSON 消息:

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

从客户端接收 SSE 消息

上述示例中的服务器是自处理的,也就是说,它生成和发送消息。现在,让我们看看如何从客户端接收服务器发送的 SSE 消息。

先决条件

为了从客户端接收 SSE 消息,我们需要在客户端上使用一个支持 SSE 的库。大多数现代浏览器都支持 SSE,您可以在 JavaScript 中用原生的 EventSource 类来处理 SSE 消息。下面我们来看一个使用原生 EventSource 的示例。

示例代码

在 HTML 中,我们依照以下代码添加需要接收 SSE 的地方:

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

然后,在 JavaScript 中加入以下代码:

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

现在,我们已经实现了服务器和客户端之间的实时消息通信。

结论

在本文中,我们了解了 SSE 技术,并使用 Node.js 和 SSE 技术实现了一个简单的实时消息服务器,并从客户端接收了这些消息。SSE 是一种功能强大的服务器推送消息技术,可以轻松实现实时通信。您可以将 SSE 用于任何需要实时通信的应用程序中。

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