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

Vue3_开启全局websocket

1、封装websocket

新建文件夹"socket.ts",路径:"@/utils/socket"

export default (onMessage: Function) => {let socketUrl = 'ws://171.29.8.218:8080/ems/ws/screen' //socket请求地址let socket: WebSocketlet lockReconnect = falselet timer: ReturnType<typeof setTimeout>const createSocket = () => {try {socket = new WebSocket(socketUrl)init()} catch (e) {console.log('catch' + e)reconnect()}}const reconnect = () => {if (lockReconnect) returnlockReconnect = trueclearTimeout(timer)timer = setTimeout(() => {createSocket()}, 4000)}const init = () => {socket.onopen = function (event) {console.log('WebSocket:已连接')//心跳检测重置heartCheck.reset().start()}//接收到消息的回调方法socket.onmessage = function (event) {console.log('WebSocket:收到一条消息', event.data)const isHeart = /pong/.test(event.data)if (onMessage && !isHeart) {//触发自定义onMessageonMessage.call(null, event)}heartCheck.reset().start()}//连接发生错误的回调方法socket.onerror = function (event) {console.log('WebSocket:发生错误')reconnect()}//连接关闭的回调方法socket.onclose = function (event) {console.log('WebSocket:已关闭')heartCheck.reset() //心跳检测reconnect()}//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常window.onbeforeunload = function () {socket.close()}}var heartCheck = {timeout: 8000,timeoutObj: setTimeout(() => {}),serverTimeoutObj: setInterval(() => {}),reset: function () {clearTimeout(this.timeoutObj)clearTimeout(this.serverTimeoutObj)return this},start: function () {var self = thisclearTimeout(this.timeoutObj)clearTimeout(this.serverTimeoutObj)this.timeoutObj = setTimeout(function () {//这里发送一个心跳,后端收到后,返回一个心跳消息,//onmessage拿到返回的心跳就说明连接正常socket.send(JSON.stringify({action: 'ping'}))self.serverTimeoutObj = setTimeout(function () {//如果超过一定时间还没重置,说明后端主动断开了(因此timeout设定时间要比后端返回socket间隔时间长,否则会判定后端主动断开)console.log('关闭服务')socket.close() //如果onclose会执行reconnect,我们执行 websocket.close()就行了.如果直接执行 reconnect 会触发onclose导致重连两次}, self.timeout)}, this.timeout)}}createSocket()
}

2、全局注册

在文件夹"main.ts"中

import Websocket from "./utils/socket"
const onMessageList: Array<Function> = []; // 声明一个全局变量来收集onMessage列表,因为在不同的页面可能会有不同的处理
app.provide("onMessageList", onMessageList); // 全局注入
const onMessage = (event: any) => {// 遍历onMessage集合并触发onMessageList.forEach(f => {f.call(null, event);})
}
Websocket(onMessage); // 启动websocket

3、页面使用

import { inject } from "vue";
const onMessageList = inject("onMessageList"); // 接收注入
const socketMessage = (res) => {const data = JSON.parse(res.data); // 获取数据
};
onMessageList.push(socketMessage); // 将自定义处理事件插入onMessge集合

相关文章:

Vue3_开启全局websocket

1、封装websocket 新建文件夹"socket.ts"&#xff0c;路径&#xff1a;"/utils/socket" export default (onMessage: Function) > {let socketUrl ws://171.29.8.218:8080/ems/ws/screen //socket请求地址let socket: WebSocketlet lockReconnect f…...

PTA 社交集群

当你在社交网络平台注册时&#xff0c;一般总是被要求填写你的个人兴趣爱好&#xff0c;以便找到具有相同兴趣爱好的潜在的朋友。一个“社交集群”是指部分兴趣爱好相同的人的集合。你需要找出所有的社交集群。 输入格式 输入在第一行给出一个正整数 N&#xff08;≤1000&…...

USB Type-C 受电端取电快充协议芯片,支持PD+QC+FCP+SCP+AFC快充协议

前言 随着科技的飞速发展&#xff0c;电子设备对于快速充电的需求日益增加。为了满足这一需求&#xff0c;市场上涌现出了众多快充技术和产品。其中&#xff0c;XSP08Q诱骗取电芯片以其卓越的性能和广泛的应用场景&#xff0c;成为了快充领域的一颗璀璨明星。本文将对XSP08Q P…...

C++ 模板专题 - 参数约束

一&#xff1a;概述&#xff1a; 除了使用SFINAE对模板参数进行约束之外&#xff0c;还可以使用概念&#xff08;Concepts&#xff09;来对模板参数进行约束&#xff0c;确保传入的类似满足特定条件。概念&#xff08;Concepts&#xff09;是C20中引入的&#xff0c;概念是用于…...

电商行业 | 用好企业培训工具,打造精英团队!

在竞争激烈的电商行业中&#xff0c;人才是企业最宝贵的资源。如何持续提升员工的专业技能和服务水平&#xff0c;打造一支高效、专业的金牌员工队伍&#xff0c;是每个电商企业面临的重要课题。企业培训工具作为提升员工能力的关键手段&#xff0c;正逐渐成为电商行业不可或缺…...

python进阶集锦

一、迭代器和生成器 区别 关于迭代器和生成器 迭代器与生成器的区别 迭代器&#xff08;Iterator&#xff09;和生成器&#xff08;Generator&#xff09;是Python中处理序列数据的两种不同概念。迭代器是遵循迭代协议的对象&#xff0c;而生成器是一种特殊类型的迭代器&am…...

8.C++小练习

C小练习 1.练习 1.练习 计算器—加减乘除 函数调用 //简单的计算器 #include <iostream>using namespace std;//封装函数 int add(int a,int b){return a b; }int jian(int a, int b){return a - b; }int cheng(int a,int b){return a * b; }double chu(int a,int b){r…...

实现YOLO V3数据加载器:从文件系统读取图像与标签

引言 在深度学习项目中&#xff0c;数据准备是非常重要的一环。特别是在物体检测任务中&#xff0c;数据的组织和预处理直接影响到模型的训练效果。YOLO V3&#xff08;You Only Look Once Version 3&#xff09;作为一种高效的实时物体检测框架&#xff0c;其数据加载器的设计…...

安装pygod

了解pygod。 It is recommended to use pip for installation. Please make sure the latest version is installed, as PyGOD is updated frequently: pip install pygod # normal install pip install --upgrade pygod # or update if needed如果pip不是最新的&…...

探索Python与Excel的无缝对接:xlwings库的神秘面纱

文章目录 探索Python与Excel的无缝对接&#xff1a;xlwings库的神秘面纱1. 背景介绍&#xff1a;为何选择xlwings&#xff1f;2. xlwings是什么&#xff1f;3. 如何安装xlwings&#xff1f;4. 简单的库函数使用方法打开工作簿创建工作簿读取单元格数据写入单元格数据保存并关闭…...

CISE|暴雨受邀出席第二十六届中国国际软件博览会

10月24日至26日&#xff0c;备受瞩目的第二十六届中国国际软件博览会&#xff08;简称CISE&#xff09;在国家会展中心&#xff08;天津&#xff09;圆满举办。CISE不仅汇聚了来自全国各地的顶尖软件企业和机构&#xff0c;还吸引了众多专家学者和行业精英共襄盛举&#xff0c;…...

OpenEuler22.03-sp2下安装docker-非常实用

1、确定系统版本是openEuler22.03-SP2 [root192 ~]# wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.23.tgz #或者自己下载之后上传到/root下&#xff0c;测试最好是自己下载到本地再上传到服务器上 下载地址&#xff1a;https://download.dock…...

【学术会议论文投稿】前端框架巅峰对决:React、Vue与Angular的全面解析与实战指南

【JPCS独立出版】​第三届能源与动力工程国际学术会议&#xff08;EPE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 引言 在快速发展的前端技术领域&#xff0c;选择合适的框架或库对于项目的成功至关重要。React、Vu…...

[0152].第3节:IDEA中工程与模块

我的后端学习大纲 IDEA大纲 1、Project和Module的概念&#xff1a; 2、Module操作&#xff1a; 2.1.创建Module: 2.2.删除Module&#xff1a; 2.3.导入Module&#xff1a; 1.导入外来模块的代码&#xff1a; 查看Project Structure&#xff0c;选择import module&#xff1a…...

【modbus协议】libmodbus库移植基于linux平台

文章目录 下载库函数源码编译路径添加libmodbus 源码分析核心数据结构常用接口函数 开发 TCP Server 端开发TCP Client 端 下载库函数源码 编译路径添加 libmodbus 源码分析 核心数据结构 modbus_t结构体&#xff1a; 这是 libmodbus 的核心数据结构&#xff0c;代表一个 Mod…...

SpringBoot+Minio实现多文件下载和批量下载

文章目录 SpringBoot+minio实现多文件下载1、SpringBoot+minio实现多文件打成一个压缩包下载1. 添加依赖2. 配置 MinIO 客户端3. 创建下载和压缩逻辑4. 创建控制器方法来触发下载5. 测试下载功能注意事项2、在minio指定的桶名下面生产一个文件夹1. MinIO 配置2. 编写业务逻辑文…...

3.swoole安装【Docker】

一、拉取最新 swoole 镜像 docker pull phpswoole/swoole二、第一次启动swoole容器 docker run --name swoole phpswoole/swoole 三、 拷贝配置文件 docker cp swoole:/var/www /docker/swoole四、 停止 swoole 容器 dcoker stop swoole五、 删除第一次启动的swoole容器 d…...

React 探秘(三): 时间切片

文章目录 背景时间切片原理requestIderCallback 方法setImmediateMessageChannelsetTimeout React 18 时间切片源码手撸时间切片问题拆解构建任务队列宏任务包装首次开启任务递归任务执行workLoop 开启工作循环demo 模拟 总结 背景 前文学习了 fiber 架构和双缓存技术&#xff…...

OSError: Can‘t load tokenizer for ‘bert-base-uncased‘.

一、具体报错&#xff1a; 报错如下&#xff1a; OSError: Cant load tokenizer for bert-base-uncased. If you were trying to load it from https://huggingface.co/models, make sure you dont have a local directory with the same name. Otherwise, make sure bert-bas…...

中国人寿财险青岛市分公司:专业团队,卓越服务

中国人寿财险青岛市分公司拥有一支专业的团队&#xff0c;为客户提供卓越的保险服务。 公司的保险从业人员都经过严格的专业培训和考核&#xff0c;具备扎实的保险知识和丰富的实践经验。他们以客户为中心&#xff0c;用心倾听客户需求&#xff0c;为客户提供个性化的保险方案…...

【SpringCloud】基础问题

文章目录 spring-cloud-dependencies和spring-cloud-alibaba-dependencies的区别<dependencyManagement>和<dependencies>的区别<dependencyManagement><dependencies> 为什么在主函数上加上SpringBootApplication注解就可以扫描到对象为什么bootstrap…...

牛客网刷题(1)(java之数据类型、数组的创建(静态/动态初始化)、static关键字与静态属性和方法、常用的servlet包、面向对象程序设计方法优点)

目录 一、Java变量的数据类型。 <1>Java中变量的数据类型。 <2>基本数据类型。 <3>引用数据类型。 二、Java中一维数组的初始化。&#xff08;静态、动态初始化&#xff09; <1>数组。 <2>动态初始化。 <3>静态初始化。 三、看清代码后&am…...

电磁干扰(EMI)与电磁兼容性(EMC)【小登培训】

电磁干扰&#xff08;EMI&#xff09;和电磁兼容性&#xff08;EMC&#xff09;是每个产品在3C &#xff0c;CE认证过程中必不可少的测试项目&#xff1a; 一、电磁干扰&#xff08;EMI&#xff09; EMI&#xff08;Electromagnetic Interference&#xff09;是指电子设备在工作…...

保险行业的智能客服:企业AI助理与知识库的加速效应

在保险行业&#xff0c;客户服务是企业与客户之间建立信任与忠诚度的关键桥梁。随着人工智能技术的飞速发展&#xff0c;企业AI助理正逐步成为保险客服领域的重要革新力量。 一、AI助理&#xff1a;保险客服的新篇章 企业AI助理&#xff0c;以其强大的自然语言处理能力、数据分…...

PSINS工具箱函数介绍——inserrplot

关于工具箱 i n s e r r p l o t inserrplot in...

龙蟠科技业绩压力显著:资产负债率持续攀升,产能利用率也不乐观

《港湾商业观察》施子夫 黄懿 去年十月至今两度递表后&#xff0c;10月17日&#xff0c;江苏龙蟠科技股份有限公司(以下简称&#xff0c;龙蟠科技&#xff1b;603906.SH&#xff0c;02465.HK)通过港交所主板上市聆讯。 很快&#xff0c;龙蟠科技发布公告称&#xff0c;公司全…...

使用 Spring Cloud 有什么优势?

使用 Spring Cloud 有什么优势&#xff1f; 在当今的微服务架构时代&#xff0c;Spring Cloud 作为一个强大的开发框架&#xff0c;备受开发者青睐。那么&#xff0c;使用 Spring Cloud 究竟有哪些优势呢&#xff1f; 一、微服务架构简介 微服务架构是一种将单一应用程序拆分…...

MySQL 日志之 binlog 格式 → 关于 MySQL 默认隔离级别的探讨

开心一刻 image 产品还没测试直接投入生产时&#xff0c;这尼玛... 背景问题 再讲 binlog 之前&#xff0c;我们先来回顾下主流关系型数据库的默认隔离级别&#xff0c;是默认隔离级别&#xff0c;不是事务有哪几种隔离级别&#xff0c;别会错题意了 1、Oracle、SQL Server 的默…...

SQL进阶技巧:Hive如何进行更新和删除操作?

目录 0 Hive支持更新和删除操作吗&#xff1f; 1 Hive删除操作如何实现&#xff1f; 2 Hive更新操作如何实现&#xff1f; 3 小结 0 Hive支持更新和删除操作吗&#xff1f; Hive在默认情况下不支持更新和删除操作&#xff0c;但可以通过特定方式如使用ORCFileformat和Acid…...

nginx安装详解含 自动化编译安装 Debian/Ubuntu/CentOS/RHEL/ROCKY

1. 准备工作 1.1 选择操作系统 推荐操作系统&#xff1a;Ubuntu、CentOS、Debian等Linux发行版。系统要求&#xff1a;确保服务器有足够的CPU、内存和磁盘空间。 1.2 更新系统 更新包列表&#xff1a; sudo apt update # 对于Debian/Ubuntu sudo yum update # 对于CentOS…...

网站百度抓取/google安卓手机下载

需求如下&#xff1a; 有一个教学周历&#xff0c;每个月的第一天显示月份&#xff0c;比如九月、十月、十一月。该月其余的日期直接显示“日”即可。 举例&#xff1a; 原数据显示值2022-07-12122022-08-01八月2022-09-02022022-10-11112022-11-01十一月 方法一&#xff1a;…...

山西建设网官方网站/网址最全的浏览器

学过Linux或者Java的应该都知道线程的概念&#xff0c;C#也支持通过多个线程来并行执行任务。任何一个C#的程序会开始于一个单线程&#xff08;由CLR和OS自动创建的主线程&#xff09;。 下面是简单的例子&#xff1a; 1 using System;2 using System.Threading;3 4 namespace …...

web网站建设/宁波网络推广公司有哪些

关于字符集和Unicode的相关知识 src url:http://www.blueidea.com/tech/program/2010/7432.asp 作者&#xff1a;Joel Spolsky 时间&#xff1a; 2010-03-12 文档类型&#xff1a;翻译 第 1 页 关于字符集和Unicode的相关知识 [1] 第 2 页 关于字符集和Unicode的相关知识 […...

深圳定制巴士怎么买票/嘉兴seo网络推广

Mock测试就是在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象&#xff0c;用一个虚拟的对象来创建以便测试的测试方法。什么是不容易构造的对象呢&#xff1f;例如HttpServletRequest&#xff0c;需要在有servlet容器环境中创建获取。那不容易获取的对象呢&am…...

wordpress 邮件认证/seo优化方式包括

玩cloudstack的人都应该玩过模板这个功能&#xff0c;这里还是比较有意思的&#xff0c;我们底层连接vcenter 创建vm采用模板 实际这里的磁盘方案&#xff0c;并不是给系统重新分配的磁盘大小而是又新挂上了一块磁盘&#xff0c;新磁盘的大小 创建完vm后可以去虚拟里面查看磁盘…...

音乐外链生成网站怎么做/科技网站建设公司

文章目录一&#xff1a;伯努利分布/0-1分布二&#xff1a;二项分布三&#xff1a;泊松分布四&#xff1a;正态分布五&#xff1a;均匀分布六&#xff1a;指数分布一&#xff1a;伯努利分布/0-1分布 如果随机试验仅有两个可能的结果&#xff0c;那么这两个结果可以用0和1表示&a…...