前端项目中的Server-sent Events(SSE)项目实践及其与websocket的区别

前端项目中的Server-sent Events(SSE)项目实践

前言

在前端开发中,实时数据更新是提升用户体验的重要因素之一。Server-SentEvents(SSE)是一种高效的技术,允许服务器通过单向连接将实时数据推送到客户端。下面将从SSE的基本改变,使用场景展开了解,并提供一个实际案例来更好的理解如何在前端项目中应用SSE

SSE的主要特点

  1. 单项数据流:数据从服务器推送到客户端。
  2. 自动重连:在链接丢失时,浏览器会自动尝试重新链接。
  3. 简单易用:基于HTTP协议,不需要额外的库或协议。

SSE的使用场景

sse适用于需要从服务器定期推送数据的场景,例如:

  1. 实时通知系统。
  2. 实时更新的动态数据,如新闻,股票行情。
  3. 数据流展示,如仪表,数据统计大屏报表。

SSEvue2中实际项目中代码解释

created():在组件实例创建之后立即调用setupSSE()方法来初始化SSE链接。
beforeDestroy()这是在组件销毁之前调用closeSSE()方法来关闭SSE链接,确保在组件被销毁时清理资源。

created() {this.setupSSE();},beforeDestroy() {this.closeSSE();}

setupEES():用于初始化SSE链接。
“const url = ....”:设定SSE连接的URL
"this.eventSource = new EventSource(url);":创建一个新的”EventSource“实例,连接到指定的URL"this.eventSource.addEventListener("message", this.handleMessage)":监听服务器推送的message时间,当服务器推送数据时,会调用handleMessage方法来处理这些数据。
this.eventSource.addEventListener("error",this.handleError); :监听error事件,当发生错误时,会调用handleError方法来处理错误。

// 开始SSEsetupSSE() {const url = `http://192.168.60.37:32483/data-analysis-center/CompanyScreen/subscribe?id=1`;// SSE连接的URL,这里假设使用相对路径,可以根据实际情况修改this.eventSource = new EventSource(url);// 监听消息事件this.eventSource.addEventListener("message", this.handleMessage);// 监听错误事件this.eventSource.addEventListener("error", this.handleError);}

handleMessage(event): 处理 message 事件的方法。
console.log("Message received:", event.data);: 输出接收到的消息数据。你可以在这里根据需要对数据进行处理或更新组件的状态。

handleMessage(event) {    
// 在这里处理收到的消息
console.log("Message received:", event.data);
}

handleError(error): 处理 error 事件的方法。
console.error("SSE Error:", error);: 输出错误信息,以便调试。
this.eventSource.close();: 关闭 SSE连接。在发生错误时,通常需要关闭连接以防止进一步的错误。

handleError(error) {console.log(error);// 处理连接错误console.error("SSE Error:", error);this.eventSource.close(); // 关闭SSE连接
}

closeSSE(): 这个方法用于关闭 SSE 连接。
if (this.eventSource) { this.eventSource.close(); }: 在关闭连接之前,检查eventSource 是否已定义,并调用 close() 方法来关闭连接。

closeSSE() {// 关闭SSE连接if (this.eventSource) {this.eventSource.close();}
},

总体代码:

<template><div id="data-view"></div>
</template>
<script>
export default {components: {},created() {this.setupSSE();},beforeDestroy() {this.closeSSE();},mounted() {},data() {return {};},methods: {// 开始SSEsetupSSE() {const url = `http://192.168.60.37:32483/data-analysis-center/CompanyScreen/subscribe?id=1`;// SSE连接的URL,这里假设使用相对路径,可以根据实际情况修改this.eventSource = new EventSource(url);// 监听消息事件this.eventSource.addEventListener("message", this.handleMessage);// 监听错误事件this.eventSource.addEventListener("error", this.handleError);},handleMessage(event) {console.log("event", JSON.parse(event.data).data);// 处理收到的消息this.messages.push(event.data);},// 订阅报错关闭链接handleError(error) {console.log(error);// 处理连接错误console.error("SSE Error:", error);this.eventSource.close(); // 关闭SSE连接},closeSSE() {// 关闭SSE连接if (this.eventSource) {this.eventSource.close();}}},
};
</script>

项目中实现的效果:

在这里插入图片描述
SSE项目实践总结

SSE总结

上面的大屏项目中使用 SSE

在组件创建时,初始化 SSE 连接。

  • 在组件销毁时,清理 SSE 连接以释放资源。
  • 使用事件监听器处理来自服务器的消息和错误。

通过这种方式,你可以在 Vue 项目中实现实时数据更新,同时确保在组件生命周期结束时正确地关闭SSE 连接。

SSE 与 WebSocket 的详细对比

数据流方向:

  • SSE:单向(服务器到客户端)。适用于从服务器推送数据到客户端的场景,如实时通知、新闻更新。
  • WebSocket:双向(客户端和服务器)。适用于需要双向交互的场景,如在线聊天、实时游戏。

协议和开销:

  • SSE:基于HTTP协议,开销较小,易于实现和维护。适合低延迟的数据流。
  • WebSocket:在初次连接时有较高的开销,但在长期连接下具有更高的数据传输效率。适合需要高频率消息交换的应用。

浏览器支持:

  • SSE:支持现代浏览器,但某些老旧浏览器(如Internet Explorer)不支持。
  • WebSocket:广泛支持,包括所有主流浏览器。

安全性:

  • SSE:通过HTTPS提供数据安全性,但只支持单向数据流。
  • WebSocket:支持加密的 wss 协议,确保双向通信的安全性。

实现复杂度:

  • SSE:实现简单,基于 HTTP,不需要额外的库。
  • WebSocket:需要处理更多的协议细节,初次连接和维护较为复杂。

什么时候使用 SSE,什么时候使用 WebSocket

选择 SSE

  • 当你的应用只需要从服务器推送数据到客户端时,例如新闻更新、股票行情、实时通知等。
  • 当你需要实现简单的实时数据传输,且不需要复杂的双向交互。
  • 当兼容性问题不是主要考虑因素时。

选择 WebSocket

  • 当你的应用需要双向通信,例如在线聊天、实时游戏、协作编辑等。
  • 当你需要高频率的数据交换,并且需要在客户端和服务器之间进行实时交互。
  • 当你的应用需要长时间保持连接,并且能够处理连接建立的开销时。

sse VS websocket总结

SSEWebSocket是实现实时通信的两种有效技术,各有优缺点。了解它们的工作原理和适用场景,可以帮助你选择最适合你项目的解决方案。SSE 适合简单的单向数据流需求,而 WebSocket 适合复杂的双向交互应用。在项目中做出明智的选择,能够有效提升用户体验,并确保系统的高效性和可维护性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据Flink(一百零九):阿里云Flink的基本名称概念

文章目录 阿里云Flink的基本名称概念 一、层次结构 二、​​​​​​​​​​​​​​概念说明 1、工作空间&#xff08;Workspace&#xff09; 2、项目空间&#xff08;Namespace&#xff09; 3、资源&#xff08;Resource&#xff09; 4、草稿&#xff08;Draft&#…

Spring-MyBatis整合:No qualifying bean of type ‘XXX‘ available: ...

1.看一下核心配置中有没有导入myBatis配置 2.看一下service和dao有没有相应注解 3.看一下MyBatisConfig中有没有对sqlSessionFactory和mapperScannerConfigurer注释成bean对象以及有没有配置映射文件路径

【扒网络架构】backbone、ccff

backbone CCFF 还不知道网络连接方式&#xff0c;只是知道了每一层 backbone backbone.backbone.conv1.weight torch.Size([64, 3, 7, 7])backbone.backbone.layer1.0.conv1.weight torch.Size([64, 64, 1, 1])backbone.backbone.layer1.0.conv2.weight torch.Size([64, 64,…

Datawhale AI夏令营第四期 | AIGC文生图——可图Kolors-LoRA风格故事 Task1笔记

Hi&#xff0c;大家好&#xff0c;我是半亩花海。最近在尝试学习AIGC的内容&#xff0c;并报名参加了Datawhale举办的2024年AI第四期夏令营&#xff0c;主要学习内容是从零入门AI生图原理和实践。本次活动基于魔搭社区“可图Kolors-LoRA风格故事挑战赛”进而开展的项目实践学习…

【最新】推荐6款论文ai写论文软件推荐网站平台

在当前的学术研究和写作环境中&#xff0c;AI写作工具已经成为许多学者和学生的重要助手。这些工具不仅能够提高写作效率&#xff0c;还能帮助优化文章结构、润色语言以及进行查重等任务。以下将推荐六款优秀的AI写论文软件&#xff0c;并详细介绍它们的功能和特点。 1. 千笔-…

C语言 ——— 学习并使用memset函数

目录 memset函数的功能 学习memset函数​编辑 使用memset函数 memset函数的功能 memset函数是内存设置函数&#xff0c;将数据设置成传递的参数&#xff0c;以字节来设置 学习memset函数 函数的参数&#xff1a; void* ptr&#xff1a;数据要设置的起始位置的指针 int …

【代码随想录】区间和——前缀和方法

本博文为《代码随想录》学习笔记&#xff0c;原文链接&#xff1a;代码随想录 题目 原题链接&#xff1a;58. 区间和&#xff08;第九期模拟笔试&#xff09; 题目描述 给定一个整数数组 Array&#xff0c;请计算该数组在每个指定区间内元素的总和。 输入描述 第一行输入为…

VS /PROFILE(性能工具探查器)的使用

/PROFILE&#xff08;性能工具探查器&#xff09; 在 Visual Studio 开发环境中设置此链接器选项 打开项目的“属性页” 对话框。 有关详细信息&#xff0c;请参阅在 Visual Studio 中设置 C 编译器和生成属性。 选择“配置属性”>“链接器”>“高级”属性页。 修改配…

动态规划之——背包DP(完结篇)

文章目录 概要说明分组背包模板例题1思路code模板例题2思路code 有依赖的背包问题模板例题思路code 背包问题求方案数模板例题思路code 背包问题求具体方案模板例题思路code 概要说明 本文讲分组背包、有依赖的背包、 背包问题求方案数以及背包问题求具体方案 入门篇(01背包和…

STM32G070KBT6的RTC HAL库使用

*配置问题 首先使能时钟源&#xff0c;这里在时钟配置中选择LSI&#xff0c;为什么后面会说&#xff0c;然后使能Calender结构体&#xff0c;保证可以对RTC的年月日时分秒等进行写入和读取&#xff1b;alarmA和alarmB是闹钟&#xff0c;这里不用就Disable&#xff1b; Tam…

ShardingSphere之ShardingProxy集群部署

文章目录 介绍使用Zookeeper进行集群部署统一ShardingJDBC和ShardingProxy配置通过Zookeeper注册中心同步配置直接使用ShardingProxy提供的JDBC驱动读取配置文件 介绍 开发者手册 在conf/server.yaml配置文件中有下面这一段配置&#xff0c;就是关于集群部署的 mode: # typ…

极狐GitLab CICD Catalog Beta 功能介绍

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

视觉SLAM中的数学基础01 -3D空间的位置表示

在视觉SLAM中&#xff0c;理解和表示3D空间中的位置是至关重要的。这涉及到多种数学概念和工具&#xff0c;如坐标系、向量、矩阵、旋转和平移等。这些数学基础构成了视觉SLAM算法的核心。以下是3D空间位置表示的基本数学概念。 这是一个表示世界坐标系和相机坐标系之间关系的3…

JNPF快速开发平台赋能数字办公方式转变

随着信息技术的飞速发展&#xff0c;数字化转型已成为各行各业提升效率、优化流程的重要手段。JNPF快速开发平台正是在这样的背景下应运而生&#xff0c;它通过简化开发流程&#xff0c;使得非技术人员也能参与到应用的构建中来&#xff0c;从而加速了数字办公方式的转变。 数字…

畅捷通基于Flink的实时数仓落地实践

摘要&#xff1a;本文整理自畅捷通总架构师、阿里云MVP专家郑芸老师在 Flink Forward Asia 2023 中闭门会上的分享。内容主要为以下四部分&#xff1a; 业务背景数仓建设具体案例未来展望 一、业务背景 畅捷通是用友旗下成员企业&#xff0c;一直持续专注于小微企业的数字化转…

4K YouTube to MP3 Pro:跨平台音频提取与转换的好用工具

4K YouTube to MP3 Pro是一款专为追求高品质音频体验的用户设计的跨平台&#xff08;支持Mac与Windows&#xff09;音频提取与转换软件。该软件以其卓越的音频提取能力和简便的操作流程&#xff0c;在同类产品中脱颖而出&#xff0c;成为众多用户的心头好。 功能强大&#xff…

AI革新3D建模:Stable Fast 3D工具的高效应用——图片快速生成3D模型

在3D建模领域,AI技术的介入正引发一场革命。Stable Diffusion(SD)的最新应用——Stable Fast 3D,为快速生成3D模型提供了一个强大的解决方案。以下是对这项技术及其应用的详细介绍和优化建议。 一、工具概览 Stable Fast 3D模型:这是一个基于AI的3D模型生成工具,可通过H…

社交电商系统:技术融合与商业创新

一、引言 随着社交平台的普及和电商系统的不断发展&#xff0c;社交电商系统作为一种新型的商业模式应运而生。这种模式结合了传统电子商务和社交媒体的优势&#xff0c;为消费者和商家提供了一个全新的购物和销售环境。本文将深入探讨社交电商系统的技术架构、主要模式、优势以…

每日学术速递8.8

1.Rethinking temporal self-similarity for repetitive action counting 标题&#xff1a;重新思考重复动作计数的时间自相似性 作者&#xff1a; Yanan Luo, Jinhui Yi, Yazan Abu Farha, Moritz Wolter, Juergen Gall 文章链接&#xff1a;https://arxiv.org/abs/2407.09…

LVS(Linux Virtual Server)详解

LVS&#xff08;Linux Virtual Server&#xff09;是一个用于负载均衡的开源软件项目&#xff0c;旨在通过集群技术实现高性能、高可用的服务器系统。它运行在Linux操作系统上&#xff0c;并且可以利用内核级的资源来提高性能和稳定性。 思维导图 LVS的工作原理 LVS主要基于Ne…