uniapp封装websocket以及心跳检测、重连

2024-04-18 07:04

本文主要是介绍uniapp封装websocket以及心跳检测、重连,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

websocket 封装

在所需文件夹下建立websocketUtils.js文件,封装代码如下:

class websocketUtils {constructor(openId, time) {this.url = `wss://****` //ws地址 拼接一下 此处用的是openIdthis.data = nullthis.isOpenSocket = false //避免重复连接this.timeout = time //隔多久执行检测 单位秒(s)this.heartbeatInterval = null //检测服务器端是否还存活this.reconnectTimeOut = null //重连之后隔多久才再次重连try {return this.connectSocketInit()} catch (e) {console.log('===========连接错误捕获catch====================',e);this.isOpenSocket = falsethis.reconnect();}}// 创建websocket连接connectSocketInit() {this.socketTask = uni.connectSocket({url: this.url,header: {//头部可以添加所需字段如token'content-type': 'application/json'},success:()=>{console.log("============正准备建立websocket中================");// 返回实例return this.socketTask},});this.socketTask.onOpen((res) => {console.log("==============WebSocket连接正常=============");clearTimeout(this.reconnectTimeOut)clearInterval(this.heartbeatInterval)this.isOpenSocket = true;this.start();// 只有连接正常打开中 ,才能正常收到消息this.socketTask.onMessage((res) => {console.log(res.data,'===============接收===onMessage===============')//全局注册uniapp事件,在任何页面都能接受到uni.$emit('socketMessage', res)});})// 监听失败,再次打开 判断主动重连// uni.onSocketError((res) => {// 	console.log('==========WebSocket连接打开失败哦===============');//	this.isOpenSocket = false;//	this.reconnect();// });//  socket关闭了会执行 此处this.socketTask.onClose((e) => {console.log("========已经被关闭了====================",e)this.isOpenSocket = false;// 加了flag判断是否为手动(用户主动关闭)e && e.reason == 'user' ? '' : this.reconnect();})}//发送消息send(value){//  连接正常打开时 ,才能正常成功发送消息this.socketTask.send({data: value,async success() {console.log("===========消息发送成功===============");},});}//开启心跳检测start(){this.data={value:"发送心跳内容",method:"发送心跳方法名称"}this.heartbeatInterval = setInterval(()=>{console.log('======start====开启心跳检测====',this.data)this.send(JSON.stringify(this.data));},this.timeout * 1000)}//重新连接reconnect(){//停止发送心跳clearInterval(this.heartbeatInterval)//如果不是人为关闭的话,进行重连if(!this.isOpenSocket ){this.reconnectTimeOut = setTimeout(()=>{this.connectSocketInit();},3000)}}// 关闭 WebSocket 连接closeSocket(reason = '关闭') {const _this = thisthis.socketTask.close({reason,success() {_this.data = null_this.isOpenSocket = false_this.socketTask = nullclearTimeout(_this.reconnectTimeOut)clearInterval(_this.heartbeatInterval)console.log('===============关闭 WebSocket 成功===================')},fail() {console.log('===================关闭 WebSocket 失败=====================')}})}//将获取的消息导出外部exportMessage(callback) {this.socketTask.onMessage((res) => {console.log(res,'===============exportMessage============')return callback(res)})}
}module.exports = websocketUtils 

页面引入使用 

全局引入:

1.在main.js中引入,并全局注册

//引入websocket文件
import websocketUtils from '@/utils/websocketUtils.js'//挂载并开启websocket
Vue.prototype.$socketUtils = new websocketUtils("*******",10)

 2.指定页面中使用

// 发送消息
let data={value:"发送的value"}
this.$socketUtils.send(JSON.stringify(data));// 接收消息
this.$socketUtils.exportMessage(res=>{console.log(res);
})
 单页面使用引入:
<!--  页面  -->
<template><view class='e-about-operation-wrap'></view>
</template><script>import websocketUtils  from '@/utils/websocketUtils.js'const app = getApp()export default {name: 'ESign',components: {},data() {return { };},onLoad: function(option) {},onShow: function() {//在uniapp全局中定义了socketWBObj变量app.globalData.socketWBObj = new websocketUtils(this.user.loginInfo.openId,10)//监听获取消息uni.$on('socketMessage', this.wbSocketGetMsg)//方法获取收到的消息app.globalData.socketWBObj.exportMessage(res => {console.warn(res);})},onHide: function() {},onUnload(e) {},created() {},mounted() {},methods: {wbSocketGetMsg(res){const _this = thisconsole.log(res,'======wbSocketGetMsg==========')// 关闭连接if (app.globalData.socketWBObj) {app.globalData.socketWBObj.closeSocket('user')}}},watch: {},computed: {},}
</script>
<style lang='scss' scoped>
.e-about-operation-wrap{}
</style>

这篇关于uniapp封装websocket以及心跳检测、重连的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914081

相关文章

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

《Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)》:本文主要介绍Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括... 目录前言一、引入Apache POI依赖二、用法&步骤2.1 创建Excel的元素2.3 样式和字体2.

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Java springBoot初步使用websocket的代码示例

《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协... 目录一、什么是websocket二、依赖坐标地址1.springBoot父级依赖2.springBoot依赖

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

SpringBoot实现websocket服务端及客户端的详细过程

《SpringBoot实现websocket服务端及客户端的详细过程》文章介绍了WebSocket通信过程、服务端和客户端的实现,以及可能遇到的问题及解决方案,感兴趣的朋友一起看看吧... 目录一、WebSocket通信过程二、服务端实现1.pom文件添加依赖2.启用Springboot对WebSocket