使用 Server-sent Events 实现实时天气预报更新

阅读时长 7 分钟读完

在现代 Web 应用程序中,实时数据变得越来越重要,这也是用户对 Web 应用的期望之一。浏览器提供许多不同的方式来获得实时数据,其中一种方式是通过使用 Server-sent Events(SSE)。

SSE 是一种推送式事件源技术,允许客户端几乎即时地接收来自服务器的更新。这些更新被视为消息和以异步流的形式传输。因此,SSE 使得实时消息通信变得容易。

在这篇文章中,我们将探讨如何使用 SSE 来实现实时天气预报更新。我们将创建一个用于展示实时天气预报的简单网站,并使用 SSE 技术使之自动更新。

实现

准备工作

在开始实现之前,我们需要准备一些基础设施:

  1. 你需要有一个气象 API,此处我们使用OpenWeatherMap
  2. 下载Express.js,一个用于构建 Web 应用的 Node.js 框架。
  3. 安装 dotenv 用于加载配置
  4. 使用 npm install --save-dev nodemon 安装 nodemon 热加载工具用于开发

建立 Express 服务器

在项目的根目录中,创建一个新文件夹并命名为 server。进入该文件夹,并使用 npm init 命令来初始化一个新的 Node.js 项目。

然后,使用以下命令安装 Express 和 dotenv:

接下来,在 server 文件夹中创建一个名为 app.js 的新文件。

app.js 文件中,让我们开始编写代码以建立一个基本的 Express 服务器。

现在你可以使用 nodemon app.js 命令来启动 Express 服务器。

接下来,我们需要设置一个路由来提供气象数据:

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

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

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

在这里,我们首先准备了一个名为 apiKey 的常量,该常量从 .env 文件中读取 OpenWeatherMap API KEY。然后,我们提供了一个 Express 路由,该路由从 OpenWeatherMap API 获取用户指定位置的气象数据。

用 SSE 发送实时天气预报

现在,我们已经有了一个 Express 服务器和一个用于提供气象数据的路由。接下来,我们将为天气预报使用 SSE 发送数据给浏览器。

首先,让我们为天气预报创建一个前端页面。在项目根目录下新建一个 public 文件夹,其中新建一个 index.html 文件。

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

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

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

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

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

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

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

在这里,我们向页面添加了一个 ul 元素,该元素用于显示不同城市的天气预报。然后,我们使用 EventSource 创建了一个用于处理 SSE 的事件源。

接下来,我们需要在服务器端设置一个 SSE 路由,该路由将发送气象数据给浏览器。在 app.js 文件中添加以下代码:

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

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

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

在这里,我们首先设置了 SSE 的标头,然后设置了一个从名称为 Los Angeles 的城市和温度为 23 度摄氏度的虚拟气象事件。最后,我们使用 setInterval 函数将事件发送到客户端。

这样就完成了我们使用 SSE 实现实时天气预报的过程。

总结

通过实现一个简单的实时天气预报示例,我们学习了如何使用 SSE 技术来向客户端推送数据。SSE 是一种简单有效的技术,能够实现实时通信并改善 Web 应用程序的用户体验。

在实现过程中,我们还深入了解了 Node.js、Express、dotenv 和 fetch 等库的使用方法。这将帮助你更好地理解如何使用这些库实现不同的功能。

希望这篇文章能够使你更好地掌握 SSE 技术和建立实时通信的方法。如果你想要深入学习 SSE,请查看官方 MDN 文档

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

纠错
反馈