如何使用 Node.js 编写 Server-sent Events(SSE)服务器

Server-sent Events(SSE)是一种流式数据传输协议,可以使用 HTTP 连接来实现数据的实时传输。相比于 WebSockets、长轮询等实时通信方式,SSE 更加轻量级,适合在移动设备、低带宽环境下使用。

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,非常适合用来编写高效的网络应用程序。在本文中,我将介绍如何使用 Node.js 实现一个简单的 SSE 服务器,并提供示例代码和详细的指导。

准备工作

在开始编写 SSE 服务器之前,我们需要安装 Node.js 和一些必要的依赖。首先,打开终端,运行以下命令安装 Node.js:

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

这将安装 Node.js 的最新版本。也可以安装其他版本,具体请参考 Node.js 官方文档

然后,我们需要安装 Express.js、EventSource 和 body-parser(用于解析 HTTP 请求体)这些 Node.js 的依赖。运行以下命令进行安装:

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

编写 SSE 服务器

在准备好所需的依赖之后,我们可以开始编写 SSE 服务器了。在项目根目录下,创建一个名为 server.js 的文件,写下以下代码:

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

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

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

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

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

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

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

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

在这段代码中,我们使用 Express.js 框架来启动 SSE 服务器。我们定义了两个路由:/events/events/events GET 路由用于订阅 SSE 数据,POST 路由用于发送数据到 SSE 客户端。

在 GET 路由中,我们设置了响应头,告诉客户端这是一个 SSE 连接。然后,使用 EventSource 类来创建一个新的 SSE 客户端,并监听 onmessage 事件。当 SSE 服务器接收到新的数据时,将数据发送给 SSE 客户端。

POST 路由用于向 SSE 客户端发送数据。我们使用 eventSource.dispatchEvent() 方法来触发客户端监听的事件,并传递数据作为参数。如果没有已经连接的 SSE 客户端,返回 500 错误,否则返回 200 状态码。

运行 SSE 服务器

编写好 SSE 服务器后,我们可以使用以下命令启动服务器:

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

如果输出如下内容,则说明服务器已经启动:

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

现在,我们可以在浏览器中访问 http://localhost:3000,打开开发者工具,执行以下 JavaScript 代码:

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

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

这样就成功订阅了 SSE 数据流。现在我们可以向 SSE 客户端发送数据了,可以在控制台中执行以下代码:

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

这样就向 SSE 客户端发送了一条消息。在客户端控制台中,可以看到输出了我们发送的消息:

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

结论

在本文中,我们介绍了如何使用 Node.js 和 EventSource 编写 SSE 服务器。我们实现了一个简单的 SSE 服务器,并提供了详细的示例代码和指导。希望本文能对你了解 SSE 技术、学习 Node.js 编程和实现类似功能有所帮助。

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