websocket 通用类封装和使用

websocket 工具类封装

export default class SocketService{static instance=null;static get Instance(){if(!this.instance){this.instance=new SocketService();}}wx=null;callBackMapping={};connected=false;sendRetryCount=0;connectRetryCount=0;connect(){if(!window.WebSocket){return console.log("您的浏览器不支持websocket")}let url="ws:127.0.0.1:8888/websocket";this.ws=new WebSocket(url)this.ws.onopen=()=>{console.log("连接成功")this.connected=true;this.connectRetryCount=0;};this.ws.onclose=()=>{console.log("链接失败")this.connected=false;this.connectRetryCount++;setTimeout(()=>{this.connect();},500*this.connectRetryCount);};}//回调函数的注册registerCallBack(socketType,callBack){this.callBackMapping[socketType]=callBack;}//取消回调函数注册unRegisterCallBack(socketType){this.callBackMapping[socketType]=null;}//发送数据的函数send(data){if(this.connected){this.sendRetryCount=0;try{this.ws.send(JOON.stringify(data));}catch(e){this.ws.send(data)}}else{this.sendRetryCount++;setTimeout(()=>{this.send(data);},this.sendRetryCount*500)}}
}	

如何使用

1.导入
import SocketService from "@/utils/SocketService"

2.在data中定义全局句柄
socketServe:SocketService.Instance

3.初始化并使用

mounted(){init();this.socketServe.ws.onmessage=function(msg){console.log(msg.data,"chat————从服务器获取到了数据")const res=JSON.parse(msg.data)console.log("res的状态",res.type)if(res.type===0){this.receiveAllMsg.push({'type':'receive','content':res.params.message})}if(res.type===2){this.receiveAllMsg.push({"type":"receive","content":res.params.message})}}
}function init(){Toast.loading({message:"加载中...",forbidClick:true})const data=queryEyeUser().then(res=>{this.userlist=data.content;//向后端发送注册用户的消息sendRegisterData()Toast.clear()})
}SocketService.Instance.connect();this.socketServe=SocketService.Instance;
this.socketServe.registerCallBack("callback1",this.socketServe)//发送注册消息
function sendRegisterData(){const data={type:7,params:{openid:store.state.userInfo.openid,userName:store.state.userInfo.email}}this.socketServe.send(data);
}//发送消息function sendMsg2(){const data={type:1,params:{toMessageId:toUser.openid,message:content,fileType:0,}};this.socketServe.send(data)this.receiveAllMsg.push({'type':'self','connect':content})this.content=""
}

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

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

相关文章

手机AI摄影时代开启,传音引领行业标准化建设

今年春节,AI摄影可谓大出风头。人们在社交平台晒出自己在龙年的AI写真,极大地增添了节日的氛围感,也让我们看到了“AI摄影”的价值。新年伊始,手机巨头们纷纷布局该赛道,基于AI大模型实现的影像功能成为业界关注焦点。…

Go编译DLL与SO

1. 简介 将Go编译成DLL/SO供其他语言调用。 .DLL&#xff1a;文件是 Windows 操作系统的动态链接库文件。.SO 文件是 Unix、Linux 和其他类 Unix 系统的共享库文件。 2. Go编译DLL/SO 注意 export后面导出的方法名一定要大写。 package main/* #include <stdlib.h>…

Java Web(十)--jQuery

介绍 官网文档&#xff1a;jQuery 教程 jQuery API 中文文档 | jQuery API 中文在线手册 | jquery api 下载 | jquery api chm 下载地址&#xff1a;https://jquery.com/download/%20jQuery jQuery 是一个快速的&#xff0c;简洁的 javaScrip工具库&#xff0c;使用户能更方…

C语言 变量

变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型&#xff0c;类型决定了变量存储的大小和布局&#xff0c;该范围内的值都可以存储在内存中&#xff0c;运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头…

全网最新的软件测试面试八股文

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 测试技术面试题 1、什么是兼容性测试&#xff1f;兼容性测试侧…

一、前端开发

#视频链接&#xff1a;https://www.bilibili.com/video/BV1rT4y1v7uQ?p1&vd_source1717654b9cbbc6a773c2092070686a95 前端开发 前端开发1、快速开发网站2、浏览器能识别的标签2.1 编码&#xff08;head&#xff09;2.2 title(head)2.3 标题2.4 div和span练习题2.5 超链接…

Python线性代数傅里叶分析和动态系统模拟分析之一

要点 Python向量数值计算、可视化&#xff0c;线性独立性和子空间。了解欧几里德距离、余弦相似度和皮尔逊相关性应用案例&#xff1a;Python数值计算文档相似度时间序列和特征检测示例&#xff1a;Python信号处理边缘检测器, K均值示例&#xff1a;随机簇质心分布Python傅里叶…

03|索引优化

数据准备 创建联合索引 KEY idx_name_age_position (name,age,position) USING BTREE CREATE TABLE employees (id int(11) NOT NULL AUTO_INCREMENT,name varchar(24) NOT NULL DEFAULT COMMENT 姓名,age int(11) NOT NULL DEFAULT 0 COMMENT 年龄,position varchar(20) NO…

内存操作函数(c语言)

目录 概述1. memcpy函数2.memcpy函数的模拟实现3. memcmp函数4.memcmp函数的模拟实现5. memset函数6.memset函数的模拟实现7. memmove函数8.memmove函数的模拟实现结语 概述 C语言提供了一些非常有用的内存操作函数&#xff0c;其中包括memcpy、memcmp、memset和memmove。这些…

【Android】更改手机主题导致app数据丢失问题

情景&#xff1a;在使用app过程中更改系统主题&#xff08;比如从浅色主题改为深色主题&#xff09;&#xff0c;这时activity销毁重建了&#xff08;即走了onPause、onStop、onSaveInstanceState、onDestroy、onCreate、onRestoreInstanceState、onStart、onResume的生命周期&…

用Python实现绘画樱花树

下面这段代码使用了Python的turtle模块来绘制一个类似于樱花的图案。具体来说&#xff0c;它定义了两个函数&#xff1a;Tree和Petal&#xff0c;并使用这两个函数来绘制图案。 Tree函数&#xff1a; 这个函数递归地绘制了樱花的躯干。它接受两个参数&#xff1a;branch&#x…

MQTT简介

https://mqtt.org/ MQTT&#xff08;Message Queuing Telemetry Transport&#xff09; 一种轻量级的&#xff0c;基于发布订阅模式的通信协议&#xff0c;用于在物联网和机器与机器&#xff08;M2M&#xff09;通信中传输消息。 它具有低带宽和低功耗的特点&#xff0c;适用于…

Dockerfile制作镜像

Dockerfile制作镜像 Dockerfile介绍 dockerfile 是一个用来构建镜像的文本文件&#xff0c;文本内容包含了一条条构建镜像所需的指令和说明。 dockerfile仅仅是用来制作镜像的源码文件&#xff0c;是构建容器过程中的指令&#xff0c;docker能够读取dockerfile的指定进行自动…

vue3 开发记录

1.引入nprogress插件&#xff0c;显示未声明文件 无法找到模块“nprogress”的声明文件。 解决方法&#xff1a; vite-env.d.ts // 解决引入模块的报错提示 declare module "nprogress";2.在 .evn 文件中创建了自定义环境变量 VITE_APP_BASE_URL 但在项目中使用时出…

【学习记录】Resnet

Resnet的残差块 BasicBlock模块&#xff1a; Resnet的作用 解决梯度消失。网络越深&#xff0c;会导致梯度消失。Resnet可以解决梯度消失的问题。 Resnet的原理 参考视频&#xff1a;https://www.bilibili.com/video/BV1cM4y117ob/?spm_id_from333.337.search-card.all.cl…

请查收:2024年腾讯云服务器优惠价格表_租用配置报价

一张表看懂腾讯云服务器租用优惠价格表&#xff0c;一目了然&#xff0c;腾讯云服务器分为轻量应用服务器和云服务器CVM&#xff0c;CPU内存配置从2核2G、2核4G、4核8G、8核16G、4核16G、8核32G、16核32G、16核64等配置可选&#xff0c;公网带宽1M、3M、5M、12M、18M、22M、28M…

FreeRTOS任务切换

目录 一、PendSV异常 二、任务切换场合 1、执行系统调用 2、滴答定时器(SysTick)中断 三、PendSV中断服务函数 1、分析xPortPendSVHandler中断服务函数 四、查找下一个要运行的任务的两种方法 1、获取下一个要运行的任务 2、查找下一个要运行的任务的两种方法 2.1、通…

Android全屏黑边解决方案

在Android12以上的手机&#xff0c;设置全屏后屏幕底部有黑边或者白边&#xff0c;有的屏幕顶部有黑边。解决方案很简单&#xff0c;在使用的主题中添加对应的设置即可&#xff0c;如下&#xff1a; res/values/themes.xml <resources><style name"Base.Theme.La…

C++:封装

封装:将数据和操作数据的方法进行结合, 隐藏具体的实现细节, 只提供接口用来交互 类: 一种自定义类型, 类域和访问限定符, 让外面只能看到该类的一些接口, 而看不到其具体的成员及接口的具体实现 类 语法:class name{...}; 里面可有成员函数, 成员变量类域: 访问类域里面的代…

Windows系统安装TortoiseSVN并结合内网穿透实现远程访问本地服务器——“cpolar内网穿透”

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…