vue3 封装WebSocket(直接复制)

创建文件WebSocket.js

只有基本的功能

javascript 复制代码
import { ref } from 'vue';
import store from "@/store";

export default function useWebSocket(url) {
    const messagesData = ref([]);

    // 创建WebSocket连接和相关方法
    const socket = new WebSocket(url);

    socket.onopen = () => {
        console.log('WebSocket连接已建立');
    };

    socket.onmessage = (event) => {
        const receivedMessage = JSON.parse(event.data);
        //接收到后端消息,根据业务逻辑自行处理
    };

    socket.onclose = () => {
        console.log('WebSocket连接已关闭');
    };
    return {
        messagesData,
        sendMessage: (message) => {
            if (socket.readyState === WebSocket.OPEN) {
                socket.send(message);
            }
        },
        closeConnection: () => {
            socket.close();
        }
    };
}
页面使用

一般是登陆成功时调用,可以在登陆页面引入(如果不是全局需要,那就在你需要的页面引入)

javascript 复制代码
import useWebSocket from "./utils/WebSocket";
javascript 复制代码
/**
 * 这段代码是放在登陆成功时调用,或者自身设置特定条件调用
 * 实例化useWebSocket
 * 获取token,无论vuex还是本地存储
 * 写好地址调用
 * store.dispatch可以保存更新后端的信息(根据自身业务需要,没有就删除)
 */
let socket = ref(null);
const token = store.state.user.token;
socket.value = useWebSocket(`地址?token=${token}`);
store.dispatch("setMessagesData", socket.value.messagesData);
销毁
javascript 复制代码
//一般是退出登录、离开某个页面时销毁
socket.value.closeConnection();
注意

当使用f5或者点击刷新页面以后, websocket连接就会强制关闭

我的处理方法是:每次进入程序前都会重新加载App.vue文件,因此在此文件执行创建websocket实例化最为合适,无论刷新进入哪个页面都将重新创建websocket。(可以写一些判断,例如判断是否有token,有则重新创建连接,否则啥也不做)

接受和发送消息 直接调用封装的函数即可

相关推荐
Java后端的Ai之路5 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
Da Da 泓7 小时前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
程序员大阳8 小时前
副队长JavaScript教程(50)-DOM:网页开发的起点
javascript·dom·es·节点·概念·document·关系
香芋芋圆12 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
晗夜未央14 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
jktantan15 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
我命由我1234516 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
程序员大阳16 小时前
副队长JavaScript教程(65)-详解JSON:轻量级数据交换格式
javascript·json·序列化·反序列化·stringify·parse
小大宇17 小时前
Vue知识点-ElementPlus-06 单选+多选+下拉+日期选择
前端·vue.js·elementui
paopaokaka_luck18 小时前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts