如何基于 SSE 实现前端页面的自动更新?

随着 Web 技术的快速发展,前端页面越来越复杂,面临着实时图表、聊天室、股票行情等实时数据更新的问题。传统的轮询方式已经无法满足这些业务场景的需求。而基于 SSE(Server-Sent Events)的实时数据推送技术,则成为了一种非常有效的解决方案。

本文将详细介绍如何基于 SSE 实现前端页面的自动更新,从 SSE 原理解析、API 的使用、实现代码等多个方面进行探讨。希望读者通过本文的学习和实践,可以掌握 SSE 技术,为自己的 Web 应用带来前所未有的实时体验。

一、SSE 原理

SSE 是一种新型的服务器向浏览器推送数据的技术,它和 WebSockets 相似,但更简单、更轻量。相比 WebSockets 的双向通信,SSE 是一种单向通信,即服务器向客户端推送数据,客户端只能接收数据,不能发送数据。由于 SSE 采用了长连接,因此可以实现服务器在推送数据时,实时将数据更新到客户端中,从而避免了资源的浪费,提高了服务器效率。

SSE 的原理非常简单,浏览器向服务器发送一个 GET 请求,并指定响应头的 Content-Type 属性为 text/event-stream。服务器在收到此请求后,开始向浏览器发送数据,格式如下:

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

其中,message 表示需要推送的数据。需要注意到的是,每个数据的最后一行必须是 \n\n,代表一次数据传输的结束。

例如,服务器发送如下数据:

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

那么客户端应该如何接收呢?

二、API 使用

在浏览器端,我们可以使用 EventSource 对象来接收服务器推送的数据。

1. 实例化

EventSource 构造函数的第一个参数是服务器端的 URL,此链接应该在服务器端打开 SSE 连接。例如:

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

2. 接收数据

通过监听 EventSource 对象的 message 事件,我们可以接收服务器推送过来的数据。

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

3. 处理异常

EventSource 对象会自动处理连接异常,如网络断开等情况。当连接异常时,会发出 error 事件。

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

4. 关闭连接

当不需要再接收服务器的数据时,可以通过调用 close() 方法来关闭连接。

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

三、自动更新示例

接下来,我们将通过一个示例来演示如何使用 SSE 技术实现前端页面的自动更新。这是一个简单的股票行情示例,后端使用 Node.js 模拟推送行情数据,前端使用 SSE 技术接收数据并更新页面。

1. 服务端代码

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

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

服务端使用 Node.js 创建了一个 HTTP 服务器,当浏览器访问 /stock 时,服务器将开启 SSE 连接,模拟生成股票行情数据并向浏览器推送。当浏览器访问默认页面时,将返回股票行情的页面 HTML。

2. 前端代码

前端页面包含一个股票行情的 div,用于显示实时的股票行情数据。当有新的股票行情数据时,前端页面使用 JavaScript 动态创建 p 元素,并添加到股票行情 div 中。

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

3. 运行测试

打开浏览器,访问 http://localhost:8080,可以看到页面如下图所示,此时页面还没有接收到股票行情数据。

打开浏览器的开发者工具,查看 Network 面板,可以看到 SSE 连接已经建立。

过一段时间后,页面将收到服务器推送的数据,实时更新股票行情信息。

四、总结

通过本文,我们了解了 SSE 技术的原理和使用方法,并通过一个简单的示例演示了如何使用 SSE 技术实现前端页面的自动更新。同时,我们还可以将 SSE 技术应用于聊天室、实时图表、人物在线状态等业务场景中。

需要注意的是,SSE 技术并不是所有浏览器都支持,但大多数主流浏览器都已经支持了 SSE 技术。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64746bfa968c7c53b01cbc8d


猜你喜欢

  • 如何编写带有实时功能的 GraphQL API

    GraphQL 是一种新兴的 API 开发语言,它为前端开发者提供了更高效、更精细的数据查询和管理方式。与传统 RESTful API 不同,GraphQL 可以根据客户端的需求动态生成返回结果,使得...

    1 年前
  • 单元测试利器chai中的spy和stub

    在前端开发中,单元测试是非常重要的一环,可以大大提高代码的健壮性和可维护性。chai是一个流行的 JavaScript 测试框架,它提供了一些非常有用的测试工具,比如spy和stub。

    1 年前
  • JSX 方式使用 React-router-v4 实现 SPA 应用路由

    React-router-v4 是 React 应用中使用最广泛的路由库,正如其名字所示,它可以很好的实现 React 单页面应用的路由功能。本文将介绍如何使用 JSX 方式在 React 应用中使用...

    1 年前
  • 如何在 PM2 中指定运行 Node.js 的版本

    随着 Node.js 的不断更新迭代,我们可能需要在不同版本之间切换或指定某个特定版本来运行我们的应用程序。而使用 PM2 管理 Node.js 应用程序是一个不错的选择,它可以方便地管理应用程序的启...

    1 年前
  • 从详解 LESS 提高代码重用率

    随着前端技术日新月异的发展,我们的代码越来越多,重用率却越来越低,为了解决这个问题,我们可以引入 LESS 这样的 CSS 预处理器,它能够使我们的代码更易于维护和重用,提高我们的工作效率。

    1 年前
  • 如何在 Tailwind 中使用 SVG 图标实现更好的图形设计

    在前端开发中,图形设计是非常重要的一部分。而使用 SVG 图标可以为网站添加一些特别的图形元素,让网站更加生动和互动。Tailwind 是一个流行的前端框架,使用它来实现 SVG 图标设计是非常容易的...

    1 年前
  • Angular 中的依赖注入详解

    什么是依赖注入 Angular 是一个基于组件的前端开发框架,依赖注入(Dependency Injection,DI)是它的核心概念之一。 依赖注入能够简化组件之间的管理、调用和测试,它的本质是在运...

    1 年前
  • 如何使用 Fastify 实现 OAuth2.0 授权

    前言 在 web 应用程序的开发中,OAuth2.0 已经成为一种流行的协议,用于身份验证和授权。OAuth2.0 允许用户授权第三方应用程序访问其受保护的资源,而不需要将用户名和密码传递给该应用程序...

    1 年前
  • Mongoose 在使用 $pull 时遇到的问题及解决方式

    Mongoose 是基于 Node.js 平台的 MongoDB 驱动程序,它使得在 Node.js 中使用 MongoDB 更方便。在使用 Mongoose 中,$pull 是一个常用的操作,它可以...

    1 年前
  • ES10 提供更好的 Unicode 字符串支持方法

    在 ES10 中,JavaScript 提供了更好的 Unicode 字符串支持方法,这意味着我们可以更方便地使用 Unicode 字符串来处理文本。在本文中,我们将介绍 ES10 的这些新特性,并提...

    1 年前
  • 如何通过构建工具进行前端性能优化

    前端性能优化是提高网页性能的关键,尤其对于移动设备来说,更是至关重要。构建工具是前端性能优化的重要手段之一,通过使用不同的构建工具可以实现打包、压缩、懒加载等功能,有效地提高网页速度和性能。

    1 年前
  • 使用 Express.js 进行表单验证的步骤

    在前端开发中,表单验证是极其重要的一环。它能够有效地保证用户输入的安全和正确性,在提交表单数据前进行检查,将客户端的错误信息尽可能排除,使用户能够准确地输入信息,同时也能减少后端服务器的压力。

    1 年前
  • Node.js 中的安全问题及防范措施

    随着前端领域的不断发展,Node.js 已成为众多前端工程师必不可少的技术工具之一。虽然 Node.js 提供了许多便利的功能和优点,但同时也存在不少安全问题,如何防范 Node.js 的安全问题,已...

    1 年前
  • Mocha 使用多个模块测试异步操作

    对于前端开发人员而言,Mocha 是一款强大的测试框架,它可以帮助你创建和运行单元测试和集成测试,以确保你的代码质量和可靠性。在你的工作中,你可能需要测试异步操作。

    1 年前
  • 巧用 Sass,让你的 CSS 代码更易读、易维护!

    在 Web 开发中,CSS 是非常重要的一部分,它负责页面的样式和布局。然而,长期以来,CSS 的书写方式一直都很繁琐,很容易出错,而且不易于维护和更新。为了解决这个问题,Sass 应运而生。

    1 年前
  • ES8之async/await模式详解

    什么是async/await async和await是ES8(ECMAScript 2017)引入的新特性,是对Promise更高层次的抽象,能更方便地使用异步函数。

    1 年前
  • Material Design 中如何自定义 ToolBar 的颜色和高度?

    Material Design 是谷歌推出的设计语言,旨在为用户提供更加简洁、明了的使用体验。在 Material Design 中,Toolbar 是一个非常重要的组件,常常被用来作为页面顶部的导航...

    1 年前
  • CSS Grid 实现自适应布局的实用技巧

    什么是 CSS Grid? CSS Grid 是一种新的布局方式,是一种通过将子元素放置在网格中来构建网格布局的 CSS 模块。Grid 布局能够以一种简单、直观的方式,提供强大的布局能力,可以快速且...

    1 年前
  • MongoDB 如何进行跨表查询

    在 MongoDB 中进行跨表查询是一个非常常见的场景。本文将详细介绍 MongoDB 如何进行跨表查询,提供学习和指导意义。 跨表查询概述 在 MongoDB 中,跨表查询可以通过 $lookup ...

    1 年前
  • CSS Flexbox 实现水平垂直居中以及多行文本省略

    1. 什么是 Flexbox? CSS Flexbox(Flexible Box Layout Module)布局模块是一种用于在容器中对齐和分配空间的新方法。Flexbox 是一个一维布局模型,允许...

    1 年前

相关推荐

    暂无文章