使用 Server-Sent Events 提供可靠的 Web 推送

阅读时长 6 分钟读完

在现代 Web 应用中,Web 推送已经变得越来越普遍,用于实时显示事件更新、通知和其他主动内容。 以前,要实现 Web 推送,必须使用轮询或 WebSocket。这些技术有其自己的优缺点,但是它们不一定适合所有场景。 Server-Sent Events(SSE)是一种新型的 Web 推送技术,相比于其他技术,提供了简单、可靠、低延迟和低复杂度的解决方案。

什么是 Server-Sent Events?

SSE 是一种 API,用于在 Web 浏览器(客户端)和 Web 服务器之间建立单向通信通道。 它允许服务器主动推送数据给客户端。与 WebSocket 不同,SSE 不需要双向通信,因此可以使用普通的 HTTP 连接。客户端只需要使用一个简单的 JavaScript 代码片段即可订阅事件,然后服务器可以在有新数据时向客户端发送更新。

SSE 是基于“事件”机制的,这意味着服务器可以将不同类型的数据打包为不同类型的事件。这些事件可以包含任何类型的数据,例如文本、JSON、XML 等。客户端可以根据其需要处理特定类型的事件。

Server-Sent Events 的优点

  • 简单易用:SSE 的 API 很简单,客户端只需一行代码即可订阅服务器发送的事件。服务器也只需要少量代码即可实现 Web 推送。
  • 可靠性高:与轮询相比,SSE 是一种更可靠、更高效的解决方案。它减少了不必要的网络流量并且不需要任何轮询或长时间轮询。
  • 低延迟:SSE 的延迟很低,甚至可以在几毫秒内完成数据推送。
  • 低复杂度:与 WebSocket 相比,SSE 只建立单向通信通道,因此实现起来更简单。

使用 Server-Sent Events 实现 Web 推送

现在,让我们看一下如何使用 SSE 实现 Web 推送。我们将创建一个简单的聊天应用程序,允许用户通过 SSE 连接进行聊天。

首先,让我们创建一个 index.html 文件,并添加以下代码:

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

现在,我们需要在服务端实现 SSE 的逻辑。 这可以使用 Node.js 和 Express 完成。我们将使用 Express 中的 EventSource 类来实现 SSE 服务。新增一个 index.js 文件,添加以下代码:

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

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

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

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

这段代码做了以下几件事情:

  • 首先,我们使用 app.use(express.static('public')) 来指定 /public 目录作为静态资源目录,浏览器可以从这个目录获取 index.html 文件。
  • 当客户端发送请求时,将设置必要的标头以启用 EventSource 支持。
  • 然后,我们使用 setInterval 方法每隔 1 秒向客户端发送类型为“chat”的事件,包含一个用户名和一个消息。

现在,您可以在终端中运行 node index.js 并访问 http://localhost:3000 查看您的聊天应用程序。当您在输入框中输入一些文本并单击“发送”按钮时,该聊天消息将通过 SSE 推送到所有已连接的客户端。

结论

使用 Server-Sent Events 可以为您的 Web 应用程序提供高效、可靠和低延迟的 Web 推送解决方案。 SSE 的 API 简单易用,服务器端和客户端代码很容易编写。它是一种更简单、更可靠、更有效的解决方案,可用于实时显示事件更新、通知和其他主动内容的 Web 应用程序。

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

纠错
反馈