如何构建基于 Server-Sent Events 的实时网站

如何构建基于 Server-Sent Events 的实时网站

在现代 Web 应用程序中,实时性变得越来越重要。用户已经习以为常地期望能够在任何时候看到数据的变化。使用 Server-Sent Events(SSE)可以轻松地构建实时 Web 应用程序,避免轮询和 WebSocket 的复杂性。

本文将深入介绍 Server-Sent Events,介绍如何使用 SSE 构建实时网站。

什么是 Server-Sent Events?

Server-Sent Events 是一种 HTML5 API,它允许 Web 服务器向客户端推送实时数据,其中服务器始终保持活动连接。这使得 SSE 比轮询或 WebSocket 更容易实现和开发。与 WebSocket 不同,SSE 基于 HTTP 协议,因此可以使用传统的 Web 服务器,而不需要进行升级或使用新的端口。

Server-Sent Events 的核心部分是使用 EventSource 类。该类包含以下三种事件:

  1. onopen - 当连接打开时触发。
  2. onmessage - 当接收到消息时触发。
  3. onerror - 当连接发生错误时触发。

下面是一个简单的 SSE 例子:

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

在该示例中,我们使用 EventSource 类创建连接到“/stream”端点的 SSE。每当服务器推送数据时,我们将收到一个 onmessage 事件,并将其打印到控制台中。

在服务器端,可以使用许多不同的语言和框架来生成 SSE。在本文中,我们将使用 Node.js 和 Express 框架。

在服务器端生成 Server-Sent Events

使用 Node.js 和 Express,我们可以轻松地配置 SSE 端点。首先,我们需要安装 express 和 cors 库:

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

然后,我们可以使用以下示例代码创建 SSE 端点:

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

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

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

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

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

该代码首先启动一个 Express 应用程序,使用 CORS 中间件允许跨域请求。然后我们定义了一个 GET 端点“/stream”来生成 SSE。

在该端点中,我们设置了一些必需的 HTTP 标头。'Content-Type' 设置为 'text/event-stream' 来告诉浏览器该请求返回 SSE。'Cache-Control' 设置为 'no-cache' 来确保浏览器不缓存 SSE 数据。'Connection' 设置为 'keep-alive' 以确保连接保持活动状态。

然后我们使用 setInterval 函数将一条消息写入连接。在该示例中,消息包含当前时间值。请注意,每条消息必须以“data:”开头,以便浏览器能正确解析 SSE。

最后,我们启动该应用程序,并将 SSE 服务器绑定到端口“3000”。

使用 Server-Sent Events 构建实时网站

使用 SSE,我们可以轻松地将实时数据推送到浏览器。下面是一个简单的实时网站示例,它随着时间的推移更新页面标题:

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

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

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

该代码向指向 SSE 服务器的“/stream”端点建立连接。每当服务器推送消息时,它将更新页面上的当前时间和页面标题。

结论

使用 Server-Sent Events,我们可以轻松地构建实时 Web 应用程序,避免轮询和 WebSocket 的复杂性。在本文中,我们深入介绍了如何使用 SSE 构建实时网站,并提供了服务器和客户端示例代码。希望这篇文章对你有所帮助!

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