WebSocket 的封装使用

javascript 复制代码
import { ElMessage } from "element-plus";
   
// 全局WebSocket实例   
let ws = null;   
let isConnected = false;   
let currentWsUrl = ''; // 用于存储当前的wsUrl   
let baseURL = 'ws://XXX.com:8081';
   
const initWebSocket = (wsUrl, sendData) => {
   return new Promise((resolve, reject) => {
    // 检查wsUrl是否发生变化
    if (wsUrl!== currentWsUrl) {
      // 如果wsUrl发生变化,关闭已有的WebSocket连接
      if (ws) {
        ws.close();
        ws = null;
        isConnected = false;
      }
      currentWsUrl = wsUrl;
      // 创建新的WebSocket实例
      ws = new WebSocket(baseURL + wsUrl);
    }

    // 连接成功后的回调函数
    ws.onopen = function (params) {
      // console.log("客户端连接成功");
      isConnected = true;
      // 向服务器发送消息
      ws.send(JSON.stringify(sendData));
    };

    // 从服务器接受到信息时的回调函数
    ws.onmessage = function (e) {
      // console.log("收到服务器响应", e.data);
      var data = e.data;
      if (data!== undefined) {
        if (data.indexOf("{")!== -1) {
          try {
            let parsedData = JSON.parse(data);
            resolve(parsedData);
          } catch (error) {
            reject(error);
          }
        } else {
          reject(data);
        }
      }
    };

    // 连接关闭后的回调函数
    ws.onclose = function (e) {
      // console.log("关闭客户端连接");
      isConnected = false;
    };

    // 连接失败后的回调函数
    ws.onerror = function (evt) {
      ElMessage.error("连接失败了");
    };

    if (isConnected) {
      ws.send(JSON.stringify(sendData));
    }

    // 窗口关闭时,关闭websocket连接,防止连接还没断开就关闭窗口,这样服务端会抛异常。
    window.onbeforeunload = function () {
      if (ws) {
        ws.close();
        ws = null;
      }
    };
   });   
};
   
export default initWebSocket;

引入使用

javascript 复制代码
import initWebSocket from "@/utils/webSocket.js";

const getData = () => {
  let sendData = {
    type: "info",
  };
  initWebSocket(globalStore.wsUrl, sendData)
    .then((res) => {
      if (res?.s === 1) {
        Object.assign(info, res?.d);
      } else {
        ElMessage.error(res?.d);
      }
    })
    .catch((err) => {
      ElMessage.error("WebSocket出现错误");
    });
};

getData()
相关推荐
network_tester6 小时前
路由器压测实战:从负载均衡到DDoS防御,5步定位性能瓶颈(附脚本工具包)
网络·网络协议·tcp/ip·http·网络安全·https·信息与通信
稳联技术6 小时前
生物制药自动化升级:Modbus TCP与Ethernet/IP协议转换实践
网络·tcp/ip·自动化
weixin_442643427 小时前
IP Guard vs Ping32:2025 年企业防泄密系统深度横评
服务器·网络·安全·数据安全
Code季风8 小时前
跨语言RPC:使用Java客户端调用Go服务端的HTTP-RPC服务
java·网络协议·http·rpc·golang
企鹅侠客8 小时前
长连接、短连接、WebSocket区别和使用场景
网络·websocket·网络协议
CLOUD ACE9 小时前
谷歌云代理 | 金融合规上云:谷歌云PCI DSS认证环境搭建指南
服务器·网络·金融
路由侠内网穿透9 小时前
本地部署 Jupyter 并实现外部访问(Windows 版本)
服务器·ide·windows·网络协议·tcp/ip·jupyter
国际云,接待10 小时前
从CentOS迁移到TencentOS:9%成功率的一键替换实操
服务器·网络·人工智能·腾讯云
西岭千秋雪_11 小时前
计算机网络学习笔记:TCP流控、拥塞控制
网络·笔记·学习·tcp/ip·计算机网络
XiaoCCCcCCccCcccC11 小时前
网络层协议 IP 协议介绍 -- IP 协议,网段划分,私有 IP 和 公网 IP,路由
服务器·网络·tcp/ip