Node.js 如何使用 Server-Sent Events 实现实时通知

在现代 Web 应用中,实时通知已经成为了必要的功能之一。Server-Sent Events (SSE) 是一种在 Web 应用中实现实时通知的技术。相比于 WebSocket,SSE 更加轻量级和易于实现。本文将介绍如何在 Node.js 中使用 SSE 实现实时通知。

什么是 Server-Sent Events

Server-Sent Events 是一种 Web 技术,允许服务器向客户端推送消息。SSE 基于 HTTP 协议,利用长轮询机制(long-polling)实现实时通知。与 WebSocket 相比,SSE 更加轻量级和易于实现,因此在某些场景下更加适用。

SSE 的核心概念是“事件流”(event stream)。事件流是一个持续不断的数据流,由服务器推送事件组成。每个事件由一个标识符、一个可选的事件类型和一个数据字段组成。客户端通过监听事件流,即可实现实时通知。

如何使用 Server-Sent Events

在 Node.js 中,我们可以使用 sse 模块来实现 SSE 功能。首先,我们需要使用 sse 模块创建一个 SSE 服务器:

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

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

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

在上面的代码中,我们使用 http 模块创建一个 HTTP 服务器,并设置响应头,告诉客户端返回的是 SSE 数据。然后,我们使用 sse 模块创建一个 SSE 实例 client,并将响应对象 res 作为参数传入。

接下来,我们可以使用 sse 实例的 send() 方法向客户端发送事件:

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

在上面的代码中,我们向客户端发送了一个名为 message 的事件,数据为 Hello, world!

客户端可以通过监听 message 事件来接收数据:

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

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

在上面的代码中,我们使用 EventSource 对象监听 /sse 路径的事件流,并通过 addEventListener() 方法监听 message 事件。当服务器发送 message 事件时,客户端的回调函数将会被调用,并打印出接收到的数据。

示例代码

下面是一个完整的示例代码,演示了如何使用 SSE 实现一个实时聊天室:

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

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

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

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

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

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

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

在上面的代码中,我们创建了一个 HTTP 服务器,并监听 /chat 路径的请求。当客户端请求 /chat 路径时,我们返回 SSE 数据,并创建一个 SSE 实例 client

client 实例创建后,我们向客户端发送一个欢迎消息。客户端可以通过监听 message 事件来接收消息,并通过 POST 请求将消息发送给服务器。

总结

本文介绍了如何在 Node.js 中使用 Server-Sent Events 实现实时通知。相比于 WebSocket,SSE 更加轻量级和易于实现,适用于某些场景下的实时通知需求。希望本文对大家有所帮助。

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