vue3中 webSocket方法封装成一个hooks
创始人
2024-12-16 06:37:04
0

直接上代码,如果有帮助,希望不要白嫖,点赞+收藏!

generateUniqueRandomKey 方法,具体参考上一篇文章 ,csdn链接: https://blog.csdn.net/weixin_44180579/article/details/140708809

// useWebSocket.ts  // useWebSocket.js import { ref, onMounted, onBeforeUnmount } from "vue"; import { generateUniqueRandomKey } from "@/utils/utils";  //具体参考上一篇文章   export default function useWebSocket(   url: string,   onMessageCallback: any,   onErrorCallback = (error: any) => {} ) {   // 状态管理   const socketRef = ref(null);   const isConnected = ref(false);   const reconnectAttempts = ref(0);   // 最大重连次数   const maxReconnectAttempts = 5;   // 重连间隔时间,单位毫秒   const reconnectInterval = 2000;   //每次进页面,生成唯一标识符   const uniqueKey = generateUniqueRandomKey(12);    // 初始化WebSocket连接   const initWebSocket = () => {     // 拼接12位唯一标识符     let newUrl = url + "/" + uniqueKey;     socketRef.value = new WebSocket(newUrl);      socketRef.value.onopen = () => {       isConnected.value = true;       console.log("----------websocket连接成功----------");       reconnectAttempts.value = 0; // 成功连接后重置重连尝试次数     };      socketRef.value.onerror = (error: any) => {       onErrorCallback(error);     };      socketRef.value.onclose = (event: any) => {       isConnected.value = false;       //断线重连       if (reconnectAttempts.value < maxReconnectAttempts) {         setTimeout(initWebSocket, reconnectInterval);         reconnectAttempts.value++;       } else {         console.log("----------websocket连接断开,超出最大重连次数----------");       }     };      socketRef.value.onmessage = (event: any) => {       onMessageCallback(JSON.parse(event.data));     };   };    // 断开连接   const closeWebSocket = () => {     if (socketRef.value && socketRef.value.readyState === 1) {       // 禁止断线重连       reconnectAttempts.value = 6;       socketRef.value.close();       isConnected.value = false;     }   };    // 发送消息   const sendMessage = (data: any) => {     if (socketRef.value && socketRef.value.readyState === 1) {       socketRef.value.send(JSON.stringify(data));     } else {       console.error("socket连接异常--------------");     }   };    // 生命周期钩子   onMounted(() => {     initWebSocket();   });      //页面销毁前,注销关闭socket连接   onBeforeUnmount(() => {     closeWebSocket();   });    // 返回暴露的方法和状态   return {     isConnected,     sendMessage,   }; } 

useWebSocket使用方法:

import useWebSocket from "./useWebSocket"; const socketUrl = 'ws://xxxxxxxxx'  //websocket连接 const { isConnected, sendMessage } = useWebSocket(   socketUrl,   (message: any) => {     // isConnected socket连接状态 true false     // sendMessage 数据推送方法      //向成功连接的服务端推送数据       sendMessage({ filed:'hello' })   } ); 

相关内容

热门资讯

日前!欢乐情怀挂,wepoke... 日前!欢乐情怀挂,wepoker透视苹果系统(透视)其实有辅助工具(哔哩哔哩)暗藏猫腻,小编详细说明...
据了解!闲逸透视软件是免费的吗... 据了解!闲逸透视软件是免费的吗,微信微乐辅助ios(总是是有安装)-哔哩哔哩1、闲逸透视软件是免费的...
透视私人局"wpk俱... 透视私人局"wpk俱乐部辅助器"wepoker辅助工具(本来是真的辅助软件)-哔哩哔哩1、wpk俱乐...
详情透视!wpk辅助,wpk俱... 详情透视!wpk辅助,wpk俱乐部是做什么的,本来存在有辅助app(哔哩哔哩)一、游戏安装教程牌型概...
据相关数据显示!雀姬手机辅助脚... 据相关数据显示!雀姬手机辅助脚本,德普之星辅助器(透视)切实真的是有辅助方法(哔哩哔哩)1、让任何用...
据通报!微信老友广东辅助,凑一... 据通报!微信老友广东辅助,凑一桌游戏软件下载(真是是有插件)-哔哩哔哩1、操作简单,无需凑一桌游戏软...
透视工具"werpl... 透视工具"werplan免费挂下载"pokerrrr2辅助(本来真的有辅助安装)-哔哩哔哩1、上手简...
必备透视!hhpoker辅助挂... 必备透视!hhpoker辅助挂是真的吗,hhpoker是正规的吗,本来有辅助app(哔哩哔哩)1、下...
现场直击!乐乐围棋入门破解,p... 现场直击!乐乐围棋入门破解,pokemomo辅助工具(透视)一直是真的有辅助插件(哔哩哔哩)1、玩家...
这一现象值得深思!谁有老友广东... 这一现象值得深思!谁有老友广东辅助器,友间联盟辅助(都是是有安装)-哔哩哔哩谁有老友广东辅助器能透视...