在vue3中封装WebSocket

ops/2024/11/9 16:42:51/

下载websocket

javascript">npm install websocket
或
yarn add websocket

一、新建webSockte.js文件

// webSocket.js  
// 自定义组合式函数,用于管理 WebSocket 连接  import { ref, onMounted, onBeforeUnmount } from "vue";  const useWebSocket = (url, reconnectInterval = 10000, maxReconnectAttempts = 5) => {  // 创建一个响应式引用来存储 WebSocket 实例  const socket = ref(null);  // 标记组件是否已挂载  const isMounted = ref(true);  // 标记 WebSocket 是否已连接  const isConnected = ref(false);  // 记录重连尝试次数  let reconnectAttempts = 0;  // 连接 WebSocket 的函数  const connect = () => {  // 如果已存在 WebSocket 实例,则先关闭它  if (socket.value) {  socket.value.close();  }  // 创建新的 WebSocket 实例  socket.value = new WebSocket(url);  // 监听 WebSocket 打开事件  socket.value.addEventListener("open", () => {  console.log("WebSocket连接已打开");  isConnected.value = true; // 更新连接状态  });  // 监听 WebSocket 消息事件  socket.value.addEventListener("message", (event) => {  console.log("收到消息:", event.data); messages.value = JSON.parse(event.data); });  // 监听 WebSocket 关闭事件  socket.value.addEventListener("close", () => {  console.log("WebSocket连接已关闭");  isConnected.value = false; // 更新连接状态  // 如果组件仍挂载且未达到最大重连尝试次数,则尝试重新连接  if (isMounted.value && reconnectAttempts < maxReconnectAttempts) {  // 使用递增的延迟来避免频繁重连  setTimeout(connect, reconnectInterval * (reconnectAttempts + 1));  reconnectAttempts++; // 增加重连尝试次数  }  });  // 监听 WebSocket 错误事件  socket.value.addEventListener("error", (error) => {  console.error("WebSocket发生错误:", error);  // 如果组件仍挂载,并且希望处理错误后重连,可以在这里添加逻辑  });  };  // 发送消息到 WebSocket  const sendMessage = (message) => {  if (socket.value && socket.value.readyState === WebSocket.OPEN) {  socket.value.send(message);  }  };  // 组件挂载时执行  onMounted(() => {  isMounted.value = true;  connect(); // 尝试建立连接  });  // 组件卸载前执行  onBeforeUnmount(() => {  isMounted.value = false;  if (socket.value) {  socket.value.close(); // 关闭 WebSocket 连接  }  });   // 返回对象,包含 WebSocket 实例、连接状态和发送消息的函数  return {  socket,  messages,isConnected,  sendMessage,  };  
};  export default webSocket;

二、页面中使用webSocket

<script setup>
import { onMounted, ref } from "vue";import webSocket from "./webSocket.js"; // 引入新建的webSocket.js文件
const { sendMessage, messages } = webSocket('ws://your-websocket-url', 10000, 5); // 监听 messages 的变化
watchEffect(() => {if (messages.value) {// 打印websocket传的值console.log(messages.value);}
});onMounted(() => {sendMessage("Hello WebSocket!");
});</script>


http://www.ppmy.cn/ops/102729.html

相关文章

Vue3-win7搭建vue3环境

Vue3-win7搭建vue3环境 官方要求的信息是是node.js 18.03以上。而我的环境&#xff1a;win7 x64&#xff0c; vscode 1.34。 参考网址&#xff1a; 0、基本的安装 https://blog.csdn.net/m0_49139268/article/details/126159171 a、这里有各种安装包的下载路径&#xff08;镜…

src-登陆框的常见测试思路

常见的登陆形式 第三方平台 OAuth 认证 用户名 密码 手机号 短信验证码 邮箱 邮件验证码 登陆框的常见测试思路 弱口令 弱口令指的是人为设定、复杂度较低的密码口令 为系统账户&#xff08;尤其是管理员账户&#xff09;设置弱口令会使得整个系统的身份认证模块…

vscode调试代码2(提前运行程序)

今天遇到一个很想解决的问题哈&#xff0c;就是如何使用vscode在调试前运行一个脚本&#xff0c;这个相当于提前运行的任务 之所以之前这个问题没有解决&#xff0c;是因为我搜索的 How to run a script before running/debugging a python script by vscode?To run a scrip…

AI模型应该追求全能还是专精

目录 1.概述 2.AI模型的全面评估和比较 2.1. 精度 (Accuracy) 2.2. 速度 (Speed) 2.3. 鲁棒性 (Robustness) 2.4. 可扩展性 (Scalability) 2.5. 解释性/可解释性 (Interpretability) 2.6.应用场景分析 3.AI模型的专精化和可扩展性 3.1. 模型构架选择 3.2. 训练策略 …

macos 自定义用户目录方法, /Users/xxx 用户文件存储路径自定义方法

在macos中,我们的用户数据全部都存储在了 /Users/xxx 文件夹下, 而这个文件夹默认是和我们的macos系统文件存放在了同一个磁盘卷宗(分区)里面的, 这个就给我们在遭遇系统崩溃或者其他情况重装系统时带来了极大的不便, 如果是格式化后全新安装 数据全部丢失,如果是覆盖安装同…

[海思3403] 初始配置

虚拟机和板卡桥接 首先将虚拟机设置为桥接模式 板卡用网线和PC机连接&#xff0c;PC机用VMware打开Ubuntu虚拟机 点击虚拟网络编辑器&#xff0c;点击更改设置

Golang测试func TestXX(t *testing.T)的使用

一般Golang中的测试代码都以xxx_test.go的样式&#xff0c;在命名测试函数的时候以Testxx开头。 以下是我写的一个单元&#xff1a; package testsimport "strings"func Split(s, sep string) (res []string) {i : strings.Index(s, sep)for i > -1 {res append…

【python】Python中的Socket编程底层原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…