vue3类型uniapp调用signalr

news2025/1/24 11:36:22

目录

背景

安装

renderjs

1选择一个tab页面承载renderjs代码

2编写业务逻辑代码

3编写renderjs代码


背景

后端使用.net6开发,长链接选择了微软的signalr而非原生的websocket

前端uniapp下vue3类型开发的app,需要通过长链接获取后端推送的消息

安装

npm install @microsoft/signalr

虽然安装和前端一样,但是无法像前端一样使用

renderjs

uniapp提供renderjs来帮助完成操作DOM、运行web端js库等功能

https://uniapp.dcloud.net.cn/tutorial/renderjs.html#renderjsuni-app,uniCloud,serverlesshttps://uniapp.dcloud.net.cn/tutorial/renderjs.html#renderjs这里signalr作为web端的js库 就必须使用这种方法

官方使用的示例是以echarts库作为示例的,可以下载示例项目参考代码

1 选择一个tab页面承载renderjs代码

这里我们选择我的'mine'页面

并在页面上添加元素

<view id='token' v-show='false'>{{token}}</view>

因为renderjs代码是无法调用uniapp的api的,所以只能通过这种方式获取缓存中的token

2 编写业务逻辑代码

注意:不支持<script setup>

vue3的话 必须使用setup函数,并且将renderjs调用的函数return出去

<script>
export default {
    setup() {
        //提供给renderjs调用的函数
        const test = param => {
            //用来处理业务逻辑
            console.log('test',param}
        }

        return{
            test
        }
    }
}
</script>

3 编写renderjs代码

renderjs里面封装signalr相关的代码

这里需要新建一个<script>标签,即同一个页面有两个script标签!

<script lang="renderjs" module="signalr">
    const signalR = require("@microsoft/signalr");
    export default {
		data() {
			return {
				connection: null,
				connected: false,//当前signalr是否连接上
				token: ''//连接signalr 后台需要token身份验证
			}
		},
		mounted() {
			setInterval(() => {
				this.start()
			}, 10 * 1000)
		},
        methods: {
            start() {
				let token = document.getElementById('token').innerHTML
				if (!token) {
					this.clear()
					return
				} else {
					if (token === this.token) {
						//token没变
						if (this.connection) {
							if (!this.connected) {
								// 还没连上 重新连
								this.connect()
							}
						} else {
							this.init(token)
							this.connect()
						}
					} else {
						//token变了 重新建立连接!
						this.token = token
						this.clear()
						this.init(token)
						this.connect()
					}
				}
			},
			clear() {
                //清空signalr
				this.disconnect()
				this.connection = null
			},
			async connect() {
                //连接signalr
				try {
					await this.connection.start()
					this.connected = true
				} catch (err) {
					this.connected = false
				}
			},
            async disconnect() {
				if (this.connection) {
					await this.connection.stop()
					this.connected = false
				} else {
					this.connected = false
				}
			},
            init(token) {
                this.connection = new signalR.HubConnectionBuilder()
					.withUrl(你的服务器signalrUrl, {
						accessTokenFactory: () => token
					})
					.configureLogging(signalR.LogLevel.Information)
					.build();
				this.connection.onclose(async error => {
					this.connected = false
				})
                this.connection.on(你的signalr方法名称, res => {
                    //!!重要!! 调用实际业务逻辑方法(之前定义的test方法)
					this.$ownerInstance.callMethod('test', res)
				})
            }
        }
    }



</script>

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

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

相关文章

通过对话了解cookie session与token的用途和区别

1 先来了解cookie与localstorage 1.1 http的无状态 用户: 我想看csdn我有多少粉丝了(http请求) 服务器:你是&#xff1f;请告诉我你的名字和密码&#xff0c;我确认你是谁 用户&#xff1a;发起登录请求 admin 123456 服务器&#xff1a;ok&#xff0c;登录成功 用户&…

分享几个国内免费的ChatGPT镜像网址(亲测有效)

最近由于ChatGPT的爆火也让很多小伙伴想去感受一下ChatGPT的魅力&#xff0c;那么今天就分享几个ChatGPT国内的镜像网址&#xff0c;大家可以直接使用&#xff01;记得点赞收藏一下呦&#xff01; 1、AQ Bot&#xff0c;网址&#xff1a;点我 https://su.askaiw.com/aq 缺点&…

搭建CDH流程记录

搭建CDH流程记录 如何搭建本地yum源 1.配置yum源这里使用 阿里源 http://mirrors.aliyun.com/repo/Centos-7.repo wget http://mirrors.aliyun.com/repo/Centos-7.repo2.安装http软件 yum install httpd -y3.配置httpd.conf vi /etc/httpd/conf/httpd.conf在 AddType appli…

酒店行业开启“狂飙”,尚美数智稳步领跑

文|智能相对论 作者|范柔丝 在消费行业迅速复苏的浪潮下&#xff0c;无论从销量还是数量来看&#xff0c;酒旅行业蛰伏三年后&#xff0c;终于开启了业绩狂飙。 从数量来看&#xff0c;企查查数据显示&#xff0c;截至目前&#xff0c;我国现存酒店相关企业233.5万家&#x…

Grafana链接跳转与值传递,把表格变量值从一个dashboard传递给另一个dashboard

文章目录 1. 创建两个空白 Dashboard 用于实验2. dash_1&#xff1a;创建跳转用的表格2. dash_2&#xff1a;配置接收数据的变量 Variables3. 测试跳转4. 通过跳转的变量传递方法总结 这里&#xff0c;我们一步步的来&#xff0c;通过配置一个页面跳转的效果&#xff0c;把一个…

二结(4.18)项目进度

今天学长上了多线程的课程&#xff0c;内容挺广泛的&#xff0c;部分也需要实际运用到项目中来&#xff0c;但我的登录、注册实现还没区分开服务端和客户端&#xff08;仅在同一项目里实现&#xff09; --------------------------------------------------------------------…

【分布式系统】分布式系统架构的冰与火

什么是分布式系统 分布式系统&#xff08;distributed system&#xff09;是建立在网络之上的软件系统。 以上是摘自百度百科的解释&#xff0c;不可否则&#xff0c;分布式系统的基础是网络、计算、存储。比如常见的一个Web单体系统&#xff0c;其实也是一个分布式系统&#x…

Android监听消息(二)——电话及短信监听

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为2747字&#xff0c;预计阅读6分钟 前言 前面一篇《Android监听消息&#xff08;一&#xff09;——应用消息捕获》我们使用NotificationListenerService实现了应用的消息监听&#xff0c;但是电话和短信是…

【花雕学AI】爆款ChatGPT的核心算法和技术逻辑到底是什么?

一、ChatGPT是一种基于GPT模型的聊天机器人 由OpenAI研究中心开发&#xff0c;于2022年11月30日发布。它可以根据用户的输入&#xff0c;生成自然、流畅、有趣的对话回复。它的技术逻辑主要是利用大规模的预训练语言模型&#xff08;LLM&#xff09;&#xff0c;通过Transforme…

总结823

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 暴力英语&#xff1a;早上1.5小时背单词&#xff0c;背了两篇文章&#xff0c;之后抄写5篇文章。晚上做了一道长难句。 …

CAN-FD协议

总目录链接>> AutoSAR入门和实战系列总目录 总目录链接>> AutoSAR BSW高阶配置系列总目录 文章目录 CAN-FD协议**CAN-FD协议需要什么&#xff1f;**CAN-FD 协议的属性CAN-FD 协议中的安全性 OSI 层中的 CAN-FD**CAN-FD物理层设计**CAN-FD 数据链路层数据链路层…

【2023】cookie是什么?有什么用?一篇文章彻底搞懂cookie

一个不大不小的问题 假设服务器有一个接口&#xff0c;通过请求这个接口&#xff0c;可以添加一个管理员 但是&#xff0c;不是任何人都有权力做这种操作的 那么服务器如何知道请求接口的人是有权力的呢&#xff1f; 答案是&#xff1a;只有登录过的管理员才能做这种操作 …

一天掌握C51单片机基础1-计算机数值与MCS51单片机

目录 简介计算机的数值表示源码反码补码 MCS51 单片机型号与构成存储结构外部引脚与总线接口并行 IO 口工作原理工作周期 简介 本笔记参考B站高宏亮老师的教学视频&#xff1a;点击观看 计算机的数值表示 源码 正数&#xff1a;首位 0&#xff0c;其余七位表示实际数值 负数&…

Java内存模型JMM

大厂面试题&#xff1f; 你知道什么是java内存模型JMM吗&#xff1f; JMM和Volatile它们两个之间的关系&#xff1f; JMM有哪些特性和他的三大特性是什么&#xff1f; 为什么要有JMM&#xff0c;他为什么出现&#xff1f;作用和功能是什么&#xff1f; happens-before先行发…

如何用jmeter+ant+jenkins搭建一个接口自动化测试框架?

目录 前言 一、什么是Jmeter&#xff1f; 二、什么是Ant&#xff1f; 三、什么是Jenkins&#xff1f; 四、如何构建一个JmeterAntJenkins的接口自动化测试框架&#xff1f; 五、JmeterAntJenkins接口自动化测试框架的优势和特点 六、总结 前言 Jmeter是一款功能强大的开…

陪诊小程序开发|陪诊软件开发功能特色

为了提升就医的服务质量&#xff0c;人们对于医疗服务的需求也在不断提高。这几年随着生活水平和医疗水平的提升&#xff0c;陪诊服务越来越受到人们的重视和青睐&#xff0c;越来越多的人开始意识到&#xff0c;陪伴和关爱在疾病治疗过程中的重要性&#xff0c;为了更好的规划…

Python数据结构与算法-贪心算法(一)

一、贪心算法 1、定义 贪心算法(贪婪算法)是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;他所作出的是在某种意义上的局部最优解。 贪心算法并不保证会得到最优解&#xff0c;但是在某些…

debian 10 安装prometheus 2.37.6 配置rc.local自启动

debian 10 安装prometheus 2.37.6 配置rc.local自启动 1、下载安装包2、安装3、访问普罗米修斯4、加入开机自启动4.1、配置rc-local.service4.2、添加自定义启动命令4.3、查看rc-local.service 1、下载安装包 https://prometheus.io/download/ wget -c https://github.com/pro…

人工智能前沿——「小海带」超全视觉注意力机制资源分享(附下载链接)

&#x1f4da;&#x1f4da; 人工智能 | 计算机视觉 —— 致力于目标检测领域科研Tricks改进与推荐 | 主要包括主干网络改进、轻量化网络、注意力机制、检测头部改进、空间金字塔池化、损失函数及NMS改进、ICCV/CVPR/ECCV视觉顶会创新点改进、各类数据集资源分享以及算法训练相…

Serge让你在本地运行LLaMa模型

什么是 Serge &#xff1f; Serge 是基于 llama.cpp 运行 Alpaca 模型的聊天界面。完全自托管&#xff0c;不需要 API 密钥。适合 4GB RAM 并且能在 CPU 上运行。 什么是 LLaMA ? LLaMA 是一种机器学习算法&#xff0c;全称为 Laplacian Regularized Least Squares for Multip…