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' })   } ); 

相关内容

热门资讯

来一盘!大众互娱辅助器(透明挂... 来一盘!大众互娱辅助器(透明挂)外挂透明挂辅助app(2024已更新)(哔哩哔哩)1、玩家可以在大众...
玩家必看科普!闽南旺旺麻将(好... 玩家必看科普!闽南旺旺麻将(好像真的是有挂)详细辅助挂教程1、上手简单,内置详细流程视频教学,新手小...
9分钟了解!开心泉州麻将挂是真... 9分钟了解!开心泉州麻将挂是真的吗,雀友游戏一贯有挂,曝光教程(有挂方法);1、9分钟了解!开心泉州...
七分钟详情!优乐麻将有没有挂,... 七分钟详情!优乐麻将有没有挂,越乡游双扣辅助工具(果然有辅助挂)1、该软件可以轻松地帮助玩家将越乡游...
一分钟了解!!广东雀神智能辅助... 一分钟了解!!广东雀神智能辅助器下载(透视)外挂透明挂辅助挂(2023已更新)(哔哩哔哩)1、每一步...
玩家实测!老友汇软件神器(一贯... 玩家实测!老友汇软件神器(一贯有挂)详细透视辅助教程老友汇软件神器是一种具有地方特色的麻将游戏,要想...
8分钟辅助!星悦麻将有挂吗20... 8分钟辅助!星悦麻将有挂吗2020,开心十三张辅助挂本来真的是有挂,黑科技教程(有挂攻略)星悦麻将有...
5分钟黑科技!闲来麻将,天天福... 5分钟黑科技!闲来麻将,天天福建十三张吗(果然有挂)1.天天福建十三张吗 ai辅助创建新账号,点击进...
总算了解!!微信跑得快辅助神器... 总算了解!!微信跑得快辅助神器(透明挂)外挂透明挂辅助软件(2020已更新)(哔哩哔哩);1、在微信...
揭秘!白金岛跑得快外 挂(确实... 揭秘!白金岛跑得快外 挂(确实真的有挂)详细透视教程;1、任何白金岛跑得快外 挂ai辅助神器的玩家都...