websocket封装带心跳和重连机制(vue3+ts+vite)

简介: websocket封装带心跳和重连机制(vue3+ts+vite)

import{ mitts }from"./tool";/*  * @Author: lzx  * @Date: 2022-05-25 15:42:37  * @LastEditors: lzx  * @LastEditTime: 2022-08-18 15:01:38  * @Description: Fuck Bug  * @FilePath: \talk_pc\src\utils\socket.ts  */let socketUrl: any ="";// socket地址let websocket: any =null;// websocket 实例let heartTime: any =null;// 心跳定时器实例let socketHeart: number =0;// 心跳次数letHeartTimeOut: number =3000;// 心跳超时时间let socketError: number =0;// 错误次数// 初始化socketconstinitWebSocket=(url: any)=>{  socketUrl = url;    // 初始化 websocket  websocket =newWebSocket(url);  websocketonopen();  websocketonmessage();  sendSocketHeart()};// socket 连接成功constwebsocketonopen=()=>{    websocket.onopen=function(e: any){        console.log("连接 websocket 成功", e);        resetHeart();    };};// socket 连接失败constwebsocketonerror=()=>{    websocket.onerror=function(e: any){        console.log("连接 websocket 失败", e);    };};// socket 断开链接constwebsocketclose=()=>{    websocket.onclose=function(e: any){        console.log("断开连接", e);    };};// socket 接收数据constwebsocketonmessage=()=>{  websocket.onmessage=function(e: any){    let msg =JSON.parse(e.data);    if(msg.type==='heartbeat'){      resetHeart()      console.log("心跳");    }    // console.log("收到socket消息", JSON.parse(e.data));    test(msg)// 测试数据  };};// socket 发送数据constsendMsg=(data: any)=>{    websocket.send(data);};// socket 错误constwebsocketError=()=>{    websocket.onerror=function(e: any){        console.log("socket 错误", e);    };};// socket 重置心跳constresetHeart=()=>{    socketHeart =0;    socketError =0;    clearInterval(heartTime);    sendSocketHeart();};// socket心跳发送constsendSocketHeart=()=>{    heartTime =setInterval(()=>{        if(socketHeart <=2){            console.log("心跳发送:", socketHeart);            websocket.send(              JSON.stringify({                content:"",                requestId:"aa9872be-d5b9-478e-aba4-50527cd3ef32",                type:"heartbeat"              })            );            socketHeart = socketHeart +1;        }else{            reconnect()        }    },HeartTimeOut);};// socket重连constreconnect=()=>{    if(socketError <=2){        clearInterval(heartTime);        initWebSocket(socketUrl);        socketError = socketError +1;        console.log("socket重连", socketError);    }else{    console.log("重试次数已用完的逻辑", socketError);    clearInterval(heartTime);    }};// 测试收到消息传递consttest=(msg: any)=>{  switch(msg.type){    case'heartbeat'://加入会议      mitts.emit('heartbeat', msg)      break;  }}export{    initWebSocket,    websocketonmessage,    sendMsg,    websocketonopen,    websocketonerror,    websocketclose,    websocketError,    resetHeart,    sendSocketHeart,    reconnect,};

目录
相关文章
|
2月前
|
前端开发
websocket的心跳机制
websocket的心跳机制
124 2
|
17天前
|
JSON JavaScript 前端开发
在Vue3项目中,Vite起到的作用及其可以做的事情
Vite是Vue 3项目的关键快速开发服务器和高效的热模块替换(HMR)。它的亮点包括:使用ES模块实现快速启动和动态加载,模块级别HMR提升开发效率,Rollup打包优化生产构建。此外,Vite还支持插件系统、自定义配置、静态资源处理和现代JS特性。通过`npm create vite`可快速搭建Vue项目,配置文件`vite.config.js`可定制行为,`.env`文件管理环境变量。Vite优化了开发与构建流程,提高开发者效率并保证构建性能。
|
13天前
|
资源调度 JavaScript 前端开发
vite+vue3+ts从0到1搭建企业级项目(2)
vite+vue3+ts从0到1搭建企业级项目
28 1
|
13天前
|
开发工具 git
vite+vue3+ts从0到1搭建企业级项目(4)
vite+vue3+ts从0到1搭建企业级项目
28 0
|
13天前
|
存储 JavaScript API
vite+vue3+ts从0到1搭建企业级项目(3)
vite+vue3+ts从0到1搭建企业级项目
23 0
|
13天前
|
资源调度 JavaScript 测试技术
vite+vue3+ts从0到1搭建企业级项目(1)
vite+vue3+ts从0到1搭建企业级项目
40 0
|
2月前
|
网络协议 JavaScript 前端开发
将websocket封装成一个class,断线可重连
将websocket封装成一个class,断线可重连
|
2月前
Vue3+Vite+Pinia+Naive后台管理系统搭建之五:Pinia 状态管理
Vue3+Vite+Pinia+Naive后台管理系统搭建之五:Pinia 状态管理
27 1
|
2月前
Vue3+Vite+Pinia+Naive后台管理系统搭建之一:基础项目构建
Vue3+Vite+Pinia+Naive后台管理系统搭建之一:基础项目构建
27 1
|
2月前
|
JavaScript Go
VUE3+vite项目中动态引入组件和异步组件
VUE3+vite项目中动态引入组件和异步组件