Server-sent Events 允许 Web 应用实时传输文本和数据

因为 Web 应用程序发展迅速,达到实时应用程序的水平已经变得更加重要。从在线协作工具到仪表板和其他具有实时数据需求的应用程序,开发人员需要一种轻量级的技术来传输实时数据到客户端。

Server-sent Events 简介

Server-sent Events(SSE)是一种开放网络技术,可以使用标准 HTTP 连接从服务器向客户端推送文本和数据。 SSE 使用单向连接,只需要一个 HTTP 连接,就可以实时获取从服务器发出的流数据。 SSE 与 WebSocket 相比,更为简单,它只使用标准 HTTP 协议,无需任何额外的协议转换,也不需要跨浏览器和设备兼容性问题。

SSE 通过不断发送数据流并使用“data”事件来达到更新数据的目的。这种事件很容易在现代 Web 编程中使用(例如,JavaScript 中的事件),它是 WebSocket 的某种程度上的替代。

SSE 的客户端使用原生的 EventSource API,该 API 可以通过 JavaScript 与服务器建立 SSE 连接。

SSE 的优势

SSE 是一种对浏览器的实时数据更新最佳的解决方案,具有以下优势:

  • 轻量级:SSE 只是在 HTTP 连接上添加了一个标准的事件流协议,所以它比 WebSockets 更轻量级,在传输数据这一方面也表现出更高的效率。
  • 可用性更强:SSE 使用 HTTP 标准请求,因此可以使用标准 HTTP 服务器进行部署,而不需要 WebSocket 运行时,这意味着可以考虑使用现有的基础设施和运维团队。
  • 灵活性和可定制性:SSE 协议允许服务器和客户端双方可根据自己的需求进行配置,可以发送任何类型的数据并且可以控制数据发送的频率。

可以看出,SSE 相对于 WebSockets 的优势在于轻量级,适用性更广,这是因为 SSE 更适合一些需要不间断的文本传输的场景,比如常见的实时聊天室,虽然同样也有广泛的应用。

SSE 使用示例

下面是一个简单的 SSE 示例工程基于 Node.js 平台,我们可以运行它并使用浏览器终端来访问得到实时的文本数据。

服务器端代码

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

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

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

我们创建了一个 HTTP 服务器,每秒向客户端推送当前时间。

向客户端发送 SSE 数据实际上只需要在数据前面添加一个 data 字段:

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

data 前缀告诉客户端接下来的内容是数据,而 \n\n 代表一个 SSE 事件的结束标记。

客户端代码

在浏览器端,我们使用原生的 EventSource API 连接到服务器:

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

使用EventSource API 和 onmessage 事件,我们可以接收到服务端推送的文本数据,并在控制台输出。

总结

借助 SSE 技术,我们不仅可以更加高效和快速地通过 Web 应用程序实时通信,还可以更好地控制数据传输。同时,SSE 还免去了 WebSocket 的额外开销和部署复杂度,许多 Web 应用程序可以通过它来实现实时数据传输需求。

除了本文中的运行示例,您还可以使用其它框架来开发SSE的应用,如Express、Koa等。SSE 技术是实现 Web 实时数据传输的一种优秀方式,建议您多加了解,做好技术储备。

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


猜你喜欢

  • PM2 集成使用详解

    在前端开发过程中,我们经常需要启动多个进程来处理不同的任务,这时候就需要使用 PM2 工具来帮助我们管理进程。PM2 是一个强大的进程管理工具,可以帮助我们在生产环境下管理 Node.js 应用程序,...

    1 年前
  • 如何使用 Nuxt.js 实现 SEO 友好的 SPA

    随着单页应用程序(SPA)的流行,许多开发者意识到 SEO 的重要性。但是,由于以前的单页应用程序对于搜索引擎爬虫来说并不友好,因此开发者们需要寻找一种方法来解决这个问题。

    1 年前
  • ECMAScript 2015 的模板标签函数应用及常见问题解决

    在前端开发中,常常需要进行字符串的处理和解析。而 ECMAScript 2015 提供了模板标签函数(Tagged Template)来帮助开发者更加方便地处理字符串。

    1 年前
  • 在 Kubernetes 的 Pod 中使用 ConfigMap

    前言 在 Kubernetes 集群中,我们需要经常动态地修改应用配置。如果不使用 Kubernetes 的 ConfigMap 机制,配置变更就需要重新打包、发布应用 Docker 镜像并重新部署,...

    1 年前
  • ECMAScript 2019 中的新特性:Bind Operator 和 Pipeline Operator 的应用

    ECMAScript 2019 中的新特性:Bind Operator 和 Pipeline Operator 的应用 随着前端技术不断的发展,JavaScript 作为一门优秀的语言也在不断的更新。

    1 年前
  • ECMAScript 2017 中的 Promise.all() 和 Promise.race():更好的异步处理

    ECMAScript 2017 中的 Promise.all() 和 Promise.race():更好的异步处理 在 JavaScript 开始流行之际,异步函数的处理一直是开发者们最头疼的问题。

    1 年前
  • 如何使用 Web App Manifest 配置 PWA 应用

    简介 PWA (Progressive Web Apps) 是一种新的 Web 技术,利用现代浏览器的一些特性,使得 Web 应用能够像本地应用一样运行,并且能够集成一些本地应用的功能,例如:离线缓存...

    1 年前
  • Docker 容器中搭建 Zookeeper 的教程

    Zookeeper 是一个开源的分布式协调服务,在分布式系统中广泛应用,可以实现分布式锁、任务队列、配置中心等功能。在使用 Zookeeper 这个工具的时候,我们需要对其进行配置和搭建,而 Dock...

    1 年前
  • 五大常见 Ts 类型使用技巧

    五大常见 Ts 类型使用技巧 TypeScript 是一种由 Microsoft 开发的开源编程语言,它是 JavaScript 的一个超集,扩展了 JavaScript 中的数据类型,并为其添加了面...

    1 年前
  • Cypress 测试中如何在 Jupyter Notebook 中进行数据分析

    前言 在前端开发中,掌握自动化测试技术是非常重要的,而 Cypress 是现代化的前端自动化测试框架之一,它提供了方便易用的功能和强大的 API。在测试完成后,如何对测试结果进行数据分析,可以帮助我们...

    1 年前
  • MongoDB 遇到频繁修改集合导致性能下降的优化思路

    在开发前端项目中,MongoDB 是非常流行的数据库之一。然而,经常会遇到频繁修改集合导致性能下降的问题。这个问题可能来自于代码上的不当操作或者是数据设计不够合理等原因。

    1 年前
  • 使用 GraphQL 查询时遇到的无限数据循环 bug

    在前端开发中,GraphQL 是一个非常流行的数据查询语言,它可以帮助开发者更好地管理数据请求和响应。但是,在使用 GraphQL 查询时,有时会碰到一些令人头疼的问题,比如无限数据循环 bug,这篇...

    1 年前
  • Mongoose 中使用 pre 方法在数据持久化前进行验证

    Mongoose 中使用 pre 方法在数据持久化前进行验证 Mongoose 是一个优秀的基于 Node.js 平台的 MongoDB 对象模型工具,可以很方便地操作 MongoDB 数据库。

    1 年前
  • ECMAScript 2016 中的 Proxy.revocable() 方法详解

    在 ECMAScript 2016 中,引入了一个 Proxy 对象的方法 Proxy.revocable(),它可以创建一个可以撤销(revoke)的代理对象。本文将详细介绍这个方法的特性、用法以及...

    1 年前
  • 解决 ES12 中遇到的长整型(Long Integer)无法正确处理的问题

    解决 ES12 中遇到的长整型(Long Integer)无法正确处理的问题 在 ES12 中,JavaScript 仍然没有一个独立的整数类型。相反,它使用双精度浮点数来表示所有数字,这意味着长整型...

    1 年前
  • Redis 实现分布式 Key-Value 存储的方案及优化

    前言 Redis 是一个基于内存的开源 Key-Value 存储系统,它支持多种数据类型,如字符串、列表、集合、有序集合等,并提供了易于使用的命令集合,使得 Redis 可以用作缓存、消息队列或数据库...

    1 年前
  • Tailwind CSS 的优化技巧与使用心得

    Tailwind CSS 是一款流行的全新 CSS 框架,让开发人员可以通过类似 JavaScript 的方式来构建页面和样式。它提供了大量的 CSS 类名,方便我们快速构建页面样式,使得开发效率更高...

    1 年前
  • Mocha + Chai + Sinon 如何测试私有函数

    前言 在前端开发过程中,我们经常需要编写私有函数以封装和保护代码,但是这也带来了一个问题:如何测试这些私有函数呢? 本文将介绍如何利用 Mocha、Chai 和 Sinon 来测试私有函数,并提供详细...

    1 年前
  • RxJS 异步编程的反模式和解决方案

    在 Web 开发中,前端异步编程是必不可少的部分。使用 RxJS 可以有效地处理异步事件流,并让代码更加简洁和易于阅读。然而,使用 RxJS 也会遇到一些反模式,这些反模式可能会导致代码可读性降低,出...

    1 年前
  • Koa 框架中如何使用 Nginx 进行负载均衡

    在现代互联网应用中,负载均衡是必不可少的,它可以让请求分配到多个服务器上,从而提高系统的可靠性和稳定性。在 Koa 框架中,我们可以使用 Nginx 进行负载均衡,本文将介绍具体实现方法,供大家学习和...

    1 年前

相关推荐

    暂无文章