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

uni-app连接EventSource

前言

uniapp默认是不支持event-source,这里是借助renderjs进行SSE连接

正文

引入event-source-polyfill
这里演示的是直接将代码下载到本地进行引入
下载地址
在这里插入图片描述
把里面的eventsource.min.js文件放到项目中的static文件夹
项目封装event-source.vue组件

<template>
    <view :prop="info" :change:prop="sse.onChange" id="renderjs-view" />
</template>

<script>
import { BASE_URL } from "@/utils/config"
import { getToken } from "@/utils/auth"
import { storage } from "@/utils"

export default {
    data() {
        return {
            info: {}
        }
    },
    created() {
        this.setInfo()
    },
    methods: {
        setInfo() {
            this.info = { url: BASE_URL, token: getToken(), userId: storage.getItem("userId") }
        },
        onMessage(e) {
            this.$emit('message', e)
        }
    }
}
</script>

<script module="sse" lang="renderjs">
	export default {
		data() {
			return { 
                sseInfo:{}
            }
		},
		mounted() {
			this.setSSE()
		},
		methods: {
            setSSE() {
				if (typeof EventSourcePolyfill === "function") {
					this.initSSE()
				} else {
					const script = document.createElement('script')
					script.src = "static/js/eventsource.min.js"
					script.type = "text/javascript"
					script.onload = this.initSSE.bind(this)
					document.head.appendChild(script)
				}
			},
			initSSE() {
                const sse =  new EventSourcePolyfill(`${this.sseInfo.url}/sse/system-sse/sse-server?userId=${this.sseInfo.userId}_${Date.now()}`, {
                    headers: {
                        Authorization: "Bearer " + this.sseInfo.token,
                        "Tenant-Id": 1
                    }
                })
                sse.onmessage = (e) => {
                    this.$ownerInstance.callMethod('onMessage', e)

                }
			},
            onChange(value) {
                this.sseInfo = value
			},
		}
	}
</script>

外部使用

<EventSource @message="onMessage"/>

<script lang="ts" setup>
	const onMessage = (e) => {
		// uni.showModal({
		// 	title: 'sse消息',
		// 	content: e.data,
		// })
		console.log("sse消息:",e)
	}
</script>

http://www.kler.cn/a/512658.html

相关文章:

  • Keep 实战指南:构建强大的AIOps和告警管理平台
  • 搭建Hadoop源代码阅读环境
  • 包文件分析器 Webpack Bundle Analyzer
  • 无人机飞手考证难度增加,实操、地面站教学技术详解
  • mybatis的多对一、一对多的用法
  • 【JavaEE】Spring(1)
  • 嵌入式硬件篇---ADC模拟-数字转换
  • MySQL表的增删改查(基础)CRUD
  • 【PCIe 总线及设备入门学习专栏 6.2 -- PCIe VDM (Vendor Defined Messages)】
  • Kubernetes 集群网络及服务暴露方式详解
  • 【Linux 重装】Ubuntu 启动盘 U盘无法被识别,如何处理?
  • 一款功能强大的互联网资产测绘引擎-CyberEdge
  • Dockerfile -> Docker image -> Docker container
  • Docker 学习总结(85)—— docker cp 使用总结
  • 2025 最新flutter面试总结
  • 不用编程即可实现多台PLC的MQTT协议JSON文件发布与订阅的智能网关的配置说明
  • Slate文档编辑器-Node节点与Path路径映射
  • dl学习笔记:(5)深度神经网络的正向传播
  • 使用minio高性能存储图片
  • 电子应用设计方案91:智能AI花洒系统设计
  • C# 常用的文件处理方法
  • 【STM32-学习笔记-12-】PWR电源控制
  • 数据结构(精讲)----绪论
  • C# 委托(Delegate)的使用方法及使用场景
  • MySQL可直接使用的查询表的列信息
  • Nginx:从入门到实战使用教程