在 React 中使用 Server-sent Events 进行实时数据检测

阅读时长 5 分钟读完

在现代 Web 应用程序中,实时数据检测是非常重要的。为了实现实时数据检测,我们通常使用轮询或 WebSocket。但是,这些方法都有一些缺点。轮询会导致服务器负载过高,而 WebSocket 不适用于所有情况。在这种情况下,Server-sent Events(SSE)是一种更好的解决方案。

SSE 是一种单向通信协议,它允许服务器向客户端发送事件。这些事件可以是任何类型的数据,例如 JSON、XML 或纯文本。客户端使用 EventSource API 来接收事件。SSE 的一个重要优点是它不需要客户端轮询服务器来获取数据。相反,服务器只需在有数据可用时发送事件。

在本文中,我们将学习如何在 React 应用程序中使用 SSE 进行实时数据检测。我们将使用 Node.js 和 Express 来创建服务器,并使用 React 和 EventSource API 来创建客户端。

创建服务器

首先,我们需要创建一个 Node.js 服务器。我们将使用 Express 框架来创建服务器。我们需要安装以下依赖项:

接下来,我们将创建一个名为 server.js 的文件,并添加以下代码:

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

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

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

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

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

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

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

上面的代码创建了一个 Express 应用程序,并在端口 3001 上启动服务器。我们定义了一个名为 /events 的路由,该路由返回 SSE 数据。在这个例子中,我们每秒钟发送一个包含当前时间戳的事件。

注意,我们在响应头中设置了 Content-Type 为 text/event-stream,这是 SSE 的标准 MIME 类型。我们还设置了 Cache-Control 为 no-cache,这是为了确保客户端不会缓存响应。

创建客户端

现在我们已经创建了服务器,接下来我们将使用 React 和 EventSource API 来创建客户端。我们需要安装以下依赖项:

接下来,我们将创建一个名为 App.js 的文件,并添加以下代码:

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

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

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

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

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

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

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

上面的代码创建了一个 React 组件,该组件将显示从服务器接收到的数据。我们使用 useState 钩子来存储数据状态,并使用 useEffect 钩子来订阅 SSE 事件。

在 useEffect 钩子中,我们创建了一个 EventSource 对象,并将其连接到服务器的 /events 路由。我们使用 addEventListener 方法来监听 message 事件,并将接收到的数据存储在组件状态中。在组件卸载时,我们使用 close 方法关闭 EventSource 对象。

最后,我们将组件导出为默认模块。

运行应用程序

现在我们已经创建了服务器和客户端,我们可以使用以下命令来启动应用程序:

这将在 http://localhost:3000 上启动 React 应用程序。我们还需要在另一个终端窗口中启动服务器:

这将在 http://localhost:3001 上启动服务器。

现在,在浏览器中打开 http://localhost:3000,您应该能够看到一个包含“Hello, world!”消息和当前时间戳的页面。每秒钟,页面将自动更新以显示新的时间戳。

结论

在本文中,我们学习了如何在 React 应用程序中使用 Server-sent Events 进行实时数据检测。我们创建了一个 Node.js 服务器,并使用 Express 框架和 SSE 协议来向客户端发送数据。我们还创建了一个 React 组件,并使用 EventSource API 来接收服务器发送的事件。

SSE 是一种非常有用的技术,可以用于实时数据检测和通知。它比轮询和 WebSocket 更简单和更有效。如果您需要实现实时数据检测,那么 SSE 是一种值得考虑的解决方案。

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

纠错
反馈