当前位置: 首页 > web >正文

uniapp使用sse连接后端,接收后端推过来的消息

小白终成大白

文章目录

  • 小白终成大白
  • 前言
  • 一、什么是SSE呢?和websocket的异同点有什么?
    • 相同点
    • 不同点
  • 二、直接上实现代码
  • 总结


前言

一般的请求就是前端发 后端回复 你一下我一下

如果需要有什么实时性的 后端可以主动告诉前端的技术 我首先会想到 websocket
啊 这个东西学名应该是叫流式 流式请求
但是这个websocket长连接 非常消耗服务器性能 不能支持很多用户去同时连接使用

最近听说了一个sse 推送式的
使用场景:我们在做的项目是一个游戏 到达活动时间,需要在所有用户的界面上弹出一个提示框框
这就需要后端到时间告诉前端 也可以前端不断地轮询 去发请求问后端 现在是否有活动
但是都有点消耗服务器 我们的服务器不堪一击
这个时候提出了这个Server-Sent Events sse

一、什么是SSE呢?和websocket的异同点有什么?

话不多说先来点概念

相同点

在这里插入图片描述

不同点

在这里插入图片描述

二、直接上实现代码

  1. 调用创建sse方法 可以写在某个方法下面 也可以直接写在 “< script setup >< script >”里面 和onLoad方法同级
 onLoad(async (options) => {state.myEnergyName = options.myEnergyName;let userInfo = await sheep.$store('user').getInfo();state.userId = userInfo.userId;//括号里换成你的接口地址const sseConnection = createSSEConnection('http://192.168.110.128:9068/notification/sse/subscribe/1000287')});

2.方法具体内容

   function createSSEConnection(url) {// 创建一个标准的XMLHttpRequest对象const xhr = new XMLHttpRequest()xhr.open('GET', url, true)xhr.setRequestHeader('Accept', 'text/event-stream')xhr.setRequestHeader('Cache-Control', 'no-cache')// 设置响应类型为文本xhr.responseType = 'text'// 数据缓冲区let buffer = ''// 处理进度事件xhr.onprogress = function(e) {// 获取新数据const newData = xhr.responseText.substring(buffer.length)if (newData) {buffer += newData// 按行分割数据const lines = newData.split('\n')for (const line of lines) {if (line.startsWith('data:')) {const eventData = line.substring(5).trim()// 触发数据处理handleSSEData(eventData)}}}}xhr.onerror = function(e) {console.error('SSE连接错误:', e)}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {console.log('SSE连接完成')} else {console.error('SSE连接失败:', xhr.status)}}}// 发送请求xhr.send()return xhr
}// 处理SSE数据
function handleSSEData(data) {try {const parsedData = JSON.parse(data)console.log('收到SSE数据:', parsedData)// 处理数据...} catch (e) {console.log('收到SSE文本:', data)// 处理非JSON数据...}
}

注意不要重复建立连接 该关闭时要记得关闭

// 关闭连接
function closeSSE() {
if (sseConnection) {sseConnection.abort()
}
}

总结

暂时先用到这些 学会新的招式再来补充

感谢你的阅读

http://www.xdnf.cn/news/8107.html

相关文章:

  • Rust 学习笔记:关于生命周期的练习题
  • Win11怎样禁止程序开机启动
  • 车载以太网网络测试-27【SOME/IP-SD简述】
  • MySQL中实现大数据量的快速插入
  • 游戏引擎学习第304天:构建与遍历图
  • 第六届电子通讯与人工智能国际学术会议(ICECAI 2025)
  • 语音控制设备的仿真/语音调试
  • Linux问题排查-磁盘IO使用率满如何分析
  • lambda表达式详解
  • leetcode 83和84 Remove Duplicates from Sorted List 和leetcode 1836
  • 设计模式-工厂模式和策略模式
  • Keil5 MDK LPC1768 RT-Thread KSZ8041NL uIP1.3.1实现UDP网络通讯(服务端接收并发数据)
  • 【web应用】vue3前端框架怎么修改logo?
  • 硬件产品死机问题
  • 蓝牙低功耗(BLE)的通信信道和包类型
  • HarmonyOS 鸿蒙应用开发基础:父组件和子组件的通信方法总结
  • linux系统启动脚本(格式问题)
  • 分布式系统设计 - 性能优化
  • Spring Cloud Gateway高并发限流——基于Redis实现方案解析
  • 【LeetCode 热题 100】二分查找 系列
  • 多维应用场景的落地实践的智慧园区开源了
  • HarmonyOS优化应用文件上传下载慢问题性能优化二
  • MVC 与 MVT:Web 开发架构模式的异同与实践
  • spark-Catalyst 优化器和 Tungsten 执行引擎介绍
  • AI之光,点亮星途 :揭秘“智语心桥”,如何用科技为孤独症儿童架起沟通的桥梁
  • (第95天)OGG 微服务搭建 Oracle 19C 到 MySQL 8 双向同步
  • 可信计算是什么?可信逻辑:计算系统安全的形式化分析框架
  • 【brpc】安装与使用
  • AGI大模型(32):LangChain实现RAG
  • NSSCTF-[陇剑杯 2021]webshell(问6)