uniapp微信小程序实现sse

微信小程序实现sse

注:因为微信小程序不支持sse请求,因为后台给的是分包的流,所以我们就使用接受流的方式,一直接受,然后把接受的数据拿取使用。这里还是使用uniapp的原生请求。

上代码

javascript 复制代码
//注意:一定要下载text-encoding-shim包,后台地址和token和后台约束好,复制代码后替换url和地址,即可使用。
import * as TextEncoding from "text-encoding-shim";
let buffer = ''; //定义在页面的最外面。
let encoder = new TextEncoding.TextDecoder("utf-8");//定义在页面的最外面。

//方法


startSSE() {   
	this.requestTask = uni.request({
		url: "sse后台地址",
		method: 'get', 
		header: {
			'Accept': 'text/event-stream',//必填返回的是文本
			'Cache-Control': 'no-cache',
			'Connection': 'keep-alive', 
			'Authorization': 'token'//后台的token
		},
		responseType: 'arraybuffer',//接受的是流
		enableChunked: true,//开启分包
		success: (res) => {}
	});
	 
	this.requestTask.onChunkReceived((res) => { 
	 try {
		 // 将ArrayBuffer转为字符串并追加到缓冲区
		 
		 let arrayBuffer = new Uint8Array(res.data)
		 let chunkStr = encoder.decode(arrayBuffer);
		 buffer += chunkStr;

		 // 分割完整事件(以\n\n分隔)
		 let eventEndIndex;
		 while ((eventEndIndex = buffer.indexOf('\n\n')) >= 0) {
			 const eventData = buffer.slice(0, eventEndIndex);
			 buffer = buffer.slice(eventEndIndex + 2);

			 // 解析SSE事件内容
			 const message = this.parseSSEEvent(eventData);
			 if (message) {
				 console.log('收到事件:', message);
				 // 触发自定义事件或更新数据 
				 //数据拿到后,做自己的业务处理
			 }
		 }
	 } catch (e) {
		 console.error('数据处理异常:', e);
	 } 
	});
},
// 解析SSE事件格式
 parseSSEEvent(rawData) {
	 const lines = rawData.split('\n');
	 let event = { data: '' };
 
	 lines.forEach(line => {
		 const colonIndex = line.indexOf(':');
		 if (colonIndex > 0) {
			 const field = line.slice(0, colonIndex).trim();
			 const value = line.slice(colonIndex + 1).trim();
			 if (field === 'data') {
				 event.data += value + '\n';
			 } else if (field === 'event') {
				 event.type = value;
			 } else if (field === 'id') {
				 event.id = value;
			 } else if (field === 'retry') {
				 event.retry = parseInt(value, 10);
			 }
		 }
	 });
 
	 event.data = event.data.trimEnd(); // 移除末尾换行
	 return event.data ? event : null;
 },
相关推荐
LT101579744412 小时前
2026年在线兼容性测试工具推荐|零部署网页 / APP / 小程序实测对比
测试工具·小程序
码农客栈15 小时前
小程序学习(二十八)之“订单列表”
小程序
天丁o20 小时前
Spring Boot + uni-app 智慧考勤闭环 Demo:打卡记录、异常状态和日统计如何复用到企业系统
spring boot·uni-app·mybatis plus·企业管理系统·考勤系统
这是个栗子20 小时前
uni-app 微信小程序开发:常用事件指令(@xxx)(一)
微信小程序·小程序·uni-app
2601_962344621 天前
计算机毕业设计之基于大数据的投保数据的分析系统的设计与实现
大数据·人工智能·深度学习·机器学习·信息可视化·小程序·课程设计
黑黑的独立开发笔记2 天前
「 简记往来」第十五篇:小程序性能优化——首屏从2.5秒到1.2秒
性能优化·小程序·首屏优化·分包加载·setdata·简记往来
tcdos4 天前
不止扫码 — 微信生态深度融合(登录 + 支付 + 消息)
后端·微信小程序
小徐_23334 天前
Wot UI 2.2.0 发布:Button 新增 subtle,VideoPreview 预览体验继续增强
前端·微信小程序·uni-app
宸翰6 天前
解决 uni-app App 端 vue-i18n 占位符丢失:封装跨端可用的 tf 格式化方法
前端·vue.js·uni-app
时光足迹6 天前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app