使用SSE实现echarts数据实时更新

news2025/1/17 0:07:52

区别

SSE 和 WebSocket 原理和实现方式的区别

SSE( Server-Sent Events)

SSE 是基于传统的 HTTP 协议实现的,采用了长轮询(long-polling)机制。客户端通过向服务器发送一个 HTTP 请求,服务器保持连接打开并周期性地向客户端发送数据。

SSE 通过 EventSource 对象来实现,在客户端可以通过监听 onmessage 事件来接收服务器端发送的数据。

WebSocket

WebSocket 是基于独立的 TCP 连接实现的,使用自定义的协议。客户端和服务器之间可以建立持久的全双工通信的连接,可以双向发送和接收数据。

WebSocket 协议是基于帧的,可以通过发送不同类型的帧进行通信。

实现方法

前端(vue3)

建立连接

let eventSource: EventSource;
onMounted(() => {
  eventSource = new EventSource("http://localhost:3000/sse");
  eventSource.addEventListener("customEvent", (event) => {
    const data = JSON.parse(event.data);
    title.value = data;
    list.value = data.list;
    echartsInit();
  });

  eventSource.onopen = () => {
    title.value = "连接成功";
  };
});

断开连接

//关闭SSE
const closeSSE = () => {
  eventSource.close();
  title.value = "连接已关闭";
};

后端(nodejs)

router.get("/sse", async (req, res) => {
  let url = req.url;
  res.writeHead(200, {
    "Content-Type": "text/event-stream",
    "Cache-Control": "no-cache",
    Connection: "keep-alive",
  });

  // 每隔 1 秒发送一条消息
  let id = 0;
  const intervalId = setInterval(async () => {
    let list = await userModel.find();
    // console.log(url);
    res.write(`event: customEvent\n`);
    res.write(`id: ${id}\n`);
    res.write(`retry: 30000\n`);
    // const params = url.split("?")[1]; 获取拼接内容
    const data = { id, time: new Date().toISOString(), list };
    res.write(`data: ${JSON.stringify(data)}\n\n`);
    id++;
  }, 1000);
});

实现效果

当我们修改数据的时候,图表也会实时更新

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

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

相关文章

使用React复刻ThreeJS官网示例——keyframes动画

最近在看three.js相关的东西,想着学习一下threejs给的examples。源码是用html结合js写的,恰好最近也在学习react,就用react框架学习一下。 本文参考的是threeJs给的第一个示例 three.js examples (threejs.org) 一、下载threeJS源码 通常我们…

【SpringCloud】Hystrix源码解析

hystrix是一个微服务容错组件,提供了资源隔离、服务降级、服务熔断的功能。这一章重点分析hystrix的实现原理 1、服务降级 当服务实例所在服务器承受的压力过大或者受到网络因素影响没法及时响应请求时,请求会阻塞堆积,情况严重的话整个系统…

PyCharm中如何将某个文件设置为默认运行文件

之前在使用JetBrain公司的另一款软件IDEA的时候,如果在选中static main函数后按键altenter可以默认以后运行Main类的main函数。最近在使用PyCharm学习Python,既然同为一家公司的产品而且二者的风格如此之像,所以我怀疑PyCharm中肯定也有类似的…

【Windows】Bootstrap Studio(网页设计)软件介绍及安装步骤

软件介绍 Bootstrap Studio 是一款专为前端开发者设计的强大工具,主要用于快速创建现代化的响应式网页和网站。以下是它的主要特点和功能: 直观的界面设计 Bootstrap Studio 提供了直观的用户界面,使用户能够轻松拖放元素来构建网页。界面…

2024年前端面试题及答案

7、 nginx代理跨域 8、 nodejs中间件代理跨域 9、 WebSocket协议跨域 前端数据加密问题 1 一般如何处理用户敏感信息? 前端一般使用md5、base64加密、sha1加密,想要了解详情请自行百度。 前端http相关问题 1 HTTP常用状态码及其含义? …

【Godot4.2】用PlantUML和语雀画UML类图

概述 UML:统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。PlantUML:是一个开源工具,它允许我们用文本形式来描绘和创建UML图。在VSCode中可以安装扩展来绘制,而在语雀的MarkDown编辑器中&#xff…

2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛B题超详细解题思路+数据预处理问题一代码分享

B题 洪水灾害的数据分析与预测 亚太中文赛事本次报名队伍约3000队,竞赛规模体量大致相当于2024年认证杯,1/3个妈杯,1/10个国赛。赛题难度大致相当于0.6个国赛,0.8个妈杯。该比例仅供大家参考。 本次竞赛赛题难度A:B:C3:1:4&…

学习笔记——动态路由——OSPF(OSPF状态机、DR\BDR选举)

七、OSPF状态机、DR\BDR选举 1、OSPF的8种状态机 OSPF在邻居与邻接建立的过程中会经过多个状态机的变化,状态机的出现不仅能让我们了解OSPF建立过程,也能在OSPF出现故障的时候通过状态机的状态来粗略判断问题的所在。 (1)邻居建立状态变化过程 1、Dow…

搜维尔科技:Xsens实时动作捕捉,驱动人形机器人操作!

搜维尔科技:http://www.souvr.comhttp://www.souvr.com实时动作捕捉,驱动人形机器人操作! 搜维尔科技:Xsens实时动作捕捉,驱动人形机器人操作!

Vue3Echarts写关于温湿度统计的好看折线图

在项目统计界面,我们离不开对Echarts的使用,接下来是我在做项目过程中做的一个关于温湿度统计的好看折线图,统计的是温度蓝色和湿度绿色,它们还会有告警和断电,分别用橘黄色和红色区分,以下是示例&#xff…

anaconda命令大全

目录 查看所有虚拟环境查看某虚拟环境安装的包创建虚拟环境激活创建好的虚拟环境回到之前的环境删除创建的虚拟环境查看conda所在的位置、虚拟环境位置等信息conda修改虚拟环境所在的位置 查看所有虚拟环境 conda env list查看某虚拟环境安装的包 激活要查看的虚拟环境之后&a…

欢乐钓鱼大师游戏攻略:在什么地方掉称号鱼?云手机游戏辅助!

《欢乐钓鱼大师》是一款融合了休闲娱乐和策略挑战的钓鱼游戏。游戏中的各种鱼类不仅各具特色,而且钓鱼过程充满了挑战和乐趣。下面将为大家详细介绍如何在游戏中钓鱼,以及一些有效的钓鱼技巧,帮助你成为一个出色的钓鱼大师。 实用工具推荐 为…

如何计算弧线弹道的落地位置

1)如何计算弧线弹道的落地位置 2)Unity 2021 IL2CPP下使用Protobuf-net序列化报异常 3)编译问题,用Mono可以,但用IL2CPP就报错 4)Wwise的Bank在安卓上LoadBank之后,播放没有声音 这是第393篇UWA…

oracle存储结构-----逻辑存储结构(表空间、段、区、块)

文章目录 oracle存储结构图(逻辑存储物理存储)oracle逻辑存储结构图逻辑存储结构、表空间、段、区、数据块的关系:1、数据 块(block)---逻辑存储最小单位2、 数据区(extent)--存储空间分配和回收…

使用 Git Hooks 防止敏感信息泄露

欢迎关注公众号:冬瓜白 在日常开发中,我们可能会不小心将敏感信息提交到 Git。为了防止这种情况,可以利用 Git Hooks 编写一个简单的脚本,当发现提交中包含敏感词时,给出提示。 以下是一个基于 pre-commit 钩子的示例…

记录在Linux(龙蜥8.6)配置jdk环境变量不生效问题

在Linux中,将jdk解压至 /opt/soft/jdk 目录中,使用root用户配置在/etc/profile中配置环境变量并source后,使用root用户是正常的,但是切换到普通用户后提示: 这个问题是普通用户对 /opt/soft/jdk 目录无执行权限 解决&…

面向对象-封装

一.包 1.简介 当我们把所有的java类都写src下的第一层级,如果是项目中,也许会有几百个java文件。 src下的文件会很多,开发的时候不方便查找,也不方便维护如果较多的文件中有同名的,十分麻烦 模块1中有一个叫test.ja…

汇聚荣拼多多评价好不好?

汇聚荣拼多多评价好不好?在探讨电商平台的口碑时,用户评价是衡量其服务质量和商品质量的重要指标。拼多多作为国内领先的电商平台之一,其用户评价自然成为消费者选择购物平台时的参考依据。针对“汇聚荣拼多多评价好不好?”这一问题,可以从…

Pinia:Vue 2 和 Vue 3 中更好用的状态管理框架

前言 还在用Vuex? 在Vue应用程序的开发过程中,高效且易于维护的状态管理一直是开发者关注的核心问题之一。随着Vue 3的发布,状态管理领域迎来了一位新星——Pinia,它不仅为Vue 3量身打造,同时也向下兼容Vue 2,以其简…

uni-appx,实现登录功能,弹窗功能。组件之间传值

这篇文章的内容使用组合式API实现的,只有弹窗部分有选择式API的写法介绍。如果想要看其他选择式API,还请下载官方的hello-uni-appx源码进行学习,查看。想要看组合式API的写法,请查看源码 hello-uvue。 hello-uni-appx源码 相比于…