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,};

目录
相关文章
|
3月前
|
JavaScript
在vue3中(vite)引入unocss,安装配置unocss
在vue3中(vite)引入unocss,安装配置unocss
|
1月前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
2月前
|
资源调度 JavaScript 前端开发
vue3第一章基础:创建Vue3.0工程,包括使用vue-cli 创建、使用 vite 创建
vue3第一章基础:创建Vue3.0工程,包括使用vue-cli 创建、使用 vite 创建
26 5
|
2月前
|
存储 前端开发 中间件
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
428 0
|
4月前
|
前端开发 JavaScript API
赶快收藏!全网最佳websocket封装:完美支持断网重连、自动心跳!
【8月更文挑战第17天】赶快收藏!全网最佳websocket封装:完美支持断网重连、自动心跳!
126 3
赶快收藏!全网最佳websocket封装:完美支持断网重连、自动心跳!
|
3月前
|
JavaScript 开发工具
vite如何打包vue3插件为JSSDK
【9月更文挑战第10天】以下是使用 Vite 打包 Vue 3 插件为 JS SDK 的步骤:首先通过 `npm init vite-plugin-sdk --template vue` 创建 Vue 3 项目并进入项目目录 `cd vite-plugin-sdk`。接着,在 `src` 目录下创建插件文件(如 `myPlugin.js`),并在 `main.js` 中引入和使用该插件。然后,修改 `vite.config.js` 文件以配置打包选项。最后,运行 `npm run build` 进行打包,生成的 `my-plugin-sdk.js` 即为 JS SDK,可在其他项目中引入使用。
139 6
|
2月前
|
存储 资源调度 JavaScript
Vite是什么?怎样使用Vite创建Vue3项目?
Vite是什么?怎样使用Vite创建Vue3项目?
117 0
|
4月前
|
JavaScript 前端开发 安全
【Vue3 + Vite】6个非常强大的后台管理项目!开源且免费!
【Vue3 + Vite】6个非常强大的后台管理项目!开源且免费!
|
5月前
|
JavaScript 前端开发 网络协议
从理论到实践:全面剖析Python Web应用中的WebSocket实时通信机制
【7月更文挑战第17天】WebSocket在实时Web应用中扮演重要角色,提供全双工通信,减少延迟。本文详述了Python中使用`websockets`库创建服务器的步骤,展示了一个简单的echo服务器示例,监听8765端口,接收并回显客户端消息。客户端通过JavaScript与服务器交互,实现双向通信。了解WebSocket的握手、传输和关闭阶段,有助于开发者有效利用WebSocket提升应用性能。随着实时需求增长,掌握WebSocket技术至关重要。
323 6
|
6月前
|
资源调度 JavaScript 前端开发
vite+vue3+ts从0到1搭建企业级项目(2)
vite+vue3+ts从0到1搭建企业级项目
95 1