如何使用 Server-Sent Events 推送新闻和设备数据

阅读时长 6 分钟读完

如何使用 Server-Sent Events 推送新闻和设备数据

前言

Web 应用程序越来越复杂,需要从服务器实时获取数据。但是,客户端请求数据的频率太高,将增加服务器的负载,可能导致带宽浪费。 此时,使用推送技术可以避免这种浪费,并使服务器更有效的处理请求。

Server Sent Events (SSE)就是一种服务器推送技术。它是现代 AJAX 的替代品,可以通过单个 HTTP 连接从服务器向客户端发送数据流,避免了轮询,并实现了实时通信。

本文旨在介绍如何使用 SSE 技术推送新闻和设备数据。

  1. 基本 SSE 结构

在使用 Server-Sent Events 之前,需要对 SSE 进行一些基本的设置。

在 HTML 文件中,需要添加一个 SSE 的连线,如下所示:

第一行创建了一个名为 source 的对象,该对象作为 SSE 的入口点,与服务器端建立连接,请求数据。

第二行设置了 SSE 受到消息时的事件处理程序。在本例中,事件处理程序打印收到的消息。

现在需要添加服务器端的代码。

在服务器端,需要延长连接时间,以允许 SSE 连接保持打开状态并接受数据。 在 PHP 中,可以通过以下代码来实现:

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

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

其中,必须设置 Content-Typetext/event-stream,并通过 Cache-Control 关闭缓存。

  1. 用 SSE 推送新闻数据

现在,看一下使用 SSE 如何推送新闻数据。

首先,在服务器端,需要创建一个与数据库或 RSS 源链接的 API。 然后,定期从服务器端获取新闻,并将其发送给 SSE 连接。

以下是 PHP 代码:

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

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

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

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

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

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

在此示例中,代码定期从 API 获取新闻并将其发送给客户端。 客户端将使用 EventSource 对象处理接收到的数据。

以下是客户端代码:

在此示例中,将每个新闻作为 HTML 标记附加到页面的尾部。 可以修改代码以更好地满足您的需求。

  1. 用 SSE 推送设备数据

接下来,看一下如何使用 SSE 推送设备数据。

服务器上的应用程序可以定期发送设备数据。以下是 PHP 代码:

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

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

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

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

在此示例中,代码生成设备数据并将其发送到客户端。 客户端将使用 EventSource 对象处理接收到的数据。

以下是客户端代码:

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

在此示例中,将每个设备的最新数据附加到页面上的 HTML 列表项中。 您可以根据需要修改此代码。

结论

Server-Sent Events 是一种灵活,快速,可扩展的服务器 - 客户端通信机制。使用 SSE 提供新闻和设备数据的实时推送可以改善 Web 应用程序的用户体验。

总之,本文提供了一个 SSE 推送新闻和设备数据的完整示例,并详细介绍了相关代码。希望这篇文章可以帮助您更好地了解 SSE,并在您的 Web 应用程序中使用它。

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

纠错
反馈