基于nodejs实现text/event-stream简单应用案例,SSE

news2024/11/15 11:35:53

基于nodejs实现text/event-stream简单应用案例,SSE

  • text/event-stream
  • 代码实现
      • 服务器端
      • 前端
  • 效果

text/event-stream

是一种用于服务器向客户端推送事件的媒体类型(Media Type)。它是基于 HTTP 协议的一种流式传输技术,也被称为 Server-Sent Events(SSE)

  1. 格式:text/event-stream 使用纯文本的格式,基于换行符分隔每个事 件。每个事件由多个字段组成,包括事件类型、数据等。常见字段有 event、data、id、retry 等(包含四个字段:event、data、id和retry。event表示事件类型,data表示消息内容,id用于设置客户端EventSource对象的“last event ID string”内部属性,retry指定了重新连接的时间)。
  2. 事件流:服务器通过持久连接(长轮询或HTTP/2流)将事件流式传输给客户端。客户端通过监听 onmessage 事件来接收并处理从服务器发送的事件。
  3. 服务器推送:服务器可以在任何时间点向客户端推送事件,无需客户端发起请求。这使得实时更新、通知和推送等应用场景变得可行,例如聊天应用、实时股票报价、即时通知等。
  4. 处理丢失连接:
    1. 如果客户端与服务器之间的连接中断,客户端可以尝试重新连接以继续接收事件。
    2. 客户端可以使用 Last-Event-ID 请求头字段来指定从特定事件 ID 开始接收事件,以便处理连接断开后的事件不丢失。

使用 text/event-stream,服务器可以实现与客户端的实时双向通信,通过推送事件来传递实时数据和状态变化。它与其他实时通信技术(如 WebSocket)相比,更适合于单向的服务器向客户端的通信场景,不支持客户端向服务器发送消息。它提供了一种简单的方式来实现服务器推送的功能,且在浏览器端的兼容性较好。

代码实现

服务器端

const http = require('http');
const yun = express();
const eventServer = http.createServer((req, res) => {
    res.writeHead(200, {
        'Content-Type': 'text/event-stream',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        'Access-Control-Allow-Origin': "*",
        'Access-Control-Allow-Headers': 'Content-Type,Content-Length,Authorization,Accept,X-Requested-With',
        'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS'
    });
    setInterval(() => {
    	// 事件要用两个\n结束
        res.write('data: The server time is: ' + new Date() + '\n\n');
    }, 1000);
    req.connection.addListener('close', () => {
        console.log('SSE connection closed!');
    }, false);
}).listen(4001);

前端

mounted() {
   const evtSource = new EventSource("http://localhost:4001/");
      evtSource.onmessage = function(event) {
         console.log('event', event)
          const serverTime = document.getElementById('serverTime');
          serverTime.innerHTML = event.data;
     };
 }

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

揭秘新一代云数仓技术架构与最佳实践

从传统数仓到湖仓一体,历经三十多年发展,技术的浪潮快速迭代,以云原生数仓为中心的现代数据栈时代已然到来。 背后的核心的原因在于,企业正在加速走向数字化、智能化,对数据的应用也提出了全新要求,特别是对…

每日一练 | 华为认证真题练习Day55

1、RSTP协议配置BPDU中的Flag字段使用了哪些STP协议未使用的标志位?(多选) A. Agreement B. TCA C. TC D. Proposal 2、RSTP中Backup端口可以替换发生故障的根端口。 A. 对 B. 错 3、如下图所示的网络,在RouterA设备里面存在…

更适合中国打工人体质的报表工具,零代码自动生成老板满意模板!

“中国职场上大家公认最头疼的是什么?” “加班?裁员?薪资?” “一切的根源来源于哪?” “是因为做大大小小报表加班到深夜、是同事都在卷报表制作有人只能被动裁员,也是千篇一律的报表汇报决定了这职业…

FreeRTOS学习笔记(五)——应用开发(三)

文章目录 0x01 软件定时器应用场景定时器精度运作机制软件定时器控制模块函数接口xTimerCreate()prvInitialiseNewTimer()xTimerStart()xTimerGenericCommand()xTimerStartFromISR()xTimerStop()xTimerStopFromISR()xTimerDelete()软件定时器任务创建以及执行原理软件定时器实验…

如何优化档案库房管理?一招学会轻松提升效率

在现代企业运营中,档案库房扮演着重要的角色,承载着大量宝贵的纸质档案资料。这些档案包含着企业的历史、客户信息、法律文件等重要数据,对于企业的正常运转和决策制定至关重要。然而,传统的档案库房管理方式存在一系列的挑战和难…

深度刨析指针Advanced 1

作者主页:paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《系统解析C语言》专栏,本专栏是针对于大学生,编程小白…

浅谈智能微电网供电系统的谐波治理

摘要:智能微电网供电系统的特性容易引发谐波,而谐波导致电力损耗加大,降低供电质量。本文从谐波的产 生原因和危害做出详细阐述,并结合智能微电网提出了治 理谐波的方法和措施。 关键词:智能微电网;谐波危害…

手术麻醉信息管理系统源码:全面监护,支持多设备采集

手术、麻醉是医院非常重要的一个组成部分,外科医生为病人进行手术的好与坏直接会危及到病人的生命,所以病人在手术麻醉过程中每一个环节都是非常重要的。随着现在高科技的发展,大量的医疗监视辅助仪器设备在手术过程中也得到广泛的应用&#…

Jenkins使用Docker(Podman)安装部署web应用

https://blog.csdn.net/onePageKownAll/article/details/128182290 https://blog.csdn.net/weixin_45647685/article/details/127825728 https://zhuanlan.zhihu.com/p/562495608 最终效果:在jenkins对某个项目进行构建,jenkins先通过git拉取最项目的…

MySQL基本知识复习补充

MySQL基本知识复习补充 SQL分类 DDL:数据定义语言。create、alter、drop、rename、truncate(清空表) DML:数据操作语言。insert、delete、update、select DCL:数据控制语言。commit、rollback、savepoint、grant、revoke 因为查询语句使…

最后机会!桥接 LAND 可以获得返还奖励!

经过 1 年的服务,The Sandbox 向我们的社区成员分发了超过 40 万 SAND,LAND 桥接返还奖励计划即将结束。 该计划是为了减轻土地持有者从以太坊桥接到 Polygon 的成本。每块土地的桥接都可获得 10 SAND 的奖励。 最后机会!再次呼吁各位桥接 LA…

从小白到大神之路之学习运维第36天---第三阶段---mysql数据库之企业级mysql部署方案

第三阶段基础 时 间:2023年6月8日 参加人:全班人员 内 容: 企业级mysql部署方案 目录 企业级MySQL部署方案 企业级mysql部署主要步骤 Linux系统初始化设置(做公司服务器) 企业级MySQL高可用集群部署方案 企业…

Keysight是德MSOS604A高清晰度示波器1 GH

Keysight是德MSOS604A S系列示波器配备 6 GHz 存储器、15 英寸 XGA 电容触摸屏和 10 位模数转换器。主要特性与技术指标 1 GHz带宽和平坦的频率响应确保高信号保真度 20 GSa/s 最大采样率 10 位模数转换器(ADC)保证高垂直分辨率 低噪声前端&#xff…

【React】setState原理,SCU,不可变对象,Ref,受控组件,高阶组件

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 setState原理setState异步更新 SCU不可变对象RefRef获取DOMRef获取组件 受控组件高阶组件(HOC)作…

告别 Spread 运算符:使用默认 Composer

在 JavaScript 中处理对象时,通常需要为空的strings// objects、或属性设置默认值。在处理嵌套对象时,这会变得更加复杂并且需要复杂的编程逻辑。然而,有了“ default-composer ”库,这项任务变得简单易行。arraysnullundefined …

零瑕疵全核心,这份RocketMQ笔记仅用330页直接封神

RocketMQ天生为金融互联网领域而生,追求高可靠、高可用、高并发、低延迟 RocketMQ在阿里集团也被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景 其主要功能有&am…

怎样快速选择正确的可视化图表?

数据可视化的图表类型十分丰富,好的图表可以有效、清晰地呈现数据的信息。对于用户而言,选择正确的图表是十分关键的,不仅可以达到“一图胜千言”的效果,而且会直接影响分析的结果。 用户选择正确的数据可视化图表前,…

银河麒麟服务器ZYJ操作系统,文件储存inode节点占用根目录/空间满了解决办法

【问题描述】 今天发现业务系统运转异常,df -h 检查服务器发现磁盘根目录空间未满,df -i 检查发现根目录文件满了。inode节点中,记录了文件的类型、大小、权限、所有者、文件连接的数目、创建时间与更新时间等重要的信息,还有一个…

蓝奥声核心技术分享——无线同步数据传输技术

1、技术背景 无线同步数据传输技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策,属于蓝奥声核心技术--边缘协同感知(EICS)技术的关键支撑性技术之一。该项技术主要涉及网络服务节点与目标对象设备之间的无线通信方式及服务机制与流…

flask做图书管理系统

一.Flask框架是一个轻量级的Web应用程序框架,它提供了一种简单的方法来创建Web应用程序。在本文中,我们将使用Flask框架来开发一个图书管理系统。在使用 Flask 开发时,建议使用虚拟环境来隔离不同项目的依赖关系,避免冲突。 摘要 …