nodejs 中的 SSE(Server-Sent Events) 实现

简介

SSE(Server-Sent Events)是一种服务器向客户端实时推送数据的机制,能够使浏览器与服务器进行长时间的单向通信。与 WebSocket 不同,SSE 基于传统的 HTTP 协议,可以使用在所有支持 HTTP 协议的浏览器中使用。SSE 借助了浏览器独特的 EventSource 接口实现了对实时数据的推送。在 Node.js 中,可用EventSource库来实现 SSE。

实现步骤

  1. 服务端使用 http.createServer 方法创建一个 HTTP 服务器。
  2. 在服务器端响应请求的同时,启用 SSE 的支持,设置响应头 Content-Type 为 "text/event-stream"。
  3. 利用 Node.js 的定时器机制,将需要推送的数据以 SSE 规范的方式推送到客户端。

代码实现

服务端(Node.js)

以下代码实现了一个基本的 SSE 服务器。当客户端发起 /events 的请求时,服务器开始向客户端推送数据。

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

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

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

客户端(HTML/JavaScript)

以下代码实现了 SSE 客户端的部分代码。当页面加载时,客户端发起了向 /events 的请求。同时,客户端设定了一个 EventSource 对象,用于监听服务端推送的数据。

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

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

总结

在 Node.js 中实现 SSE 可以帮助我们实现实时推送数据,并允许不同浏览器的客户端之间进行双向通信。此外,SSE 可以替代轮询机制,有效地减少服务器的负载。通过借助 Node.js 的定时器机制,实现 SSE 也非常简单。需要注意的是,在使用 SSE 构建应用程序时,安全问题必须得到考虑,例如 XSS 攻击和 CSRF 攻击的风险等。

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