vue前端利用websocket添加真实进度条

在static下创建websocket.js文件

let ws = null;
let weboscket_data = null;
let weboscket_callback = null;
const userInfo = JSON.parse(JSON.parse(localStorage.getItem("userInf")));//获取用户id(本项目需要可根据自己项目需求定义)
//获取 websocket 推送的数据
let websocketonmessage = (e) => {
  return weboscket_callback(e);
};

// 连接成功
let websocketonopen = () => {
  console.log("连接 websocket 成功");
};

// 连接失败时重新连接
let websocketonerror = () => {
  initWebSocket();
};

// 断开链接后报错
let websocketclose = (e) => {
  console.log("断开连接", e);
};
// 手动关闭 websocket
let closewebsocket = () => {
  ws ? ws.close() : "";
};

let initWebSocket = () => {
  //初始化 websocket
  let wsurl = `ws://ip+域名/websocket/${weboscket_data}`;
  console.log(wsurl);
  ws = new WebSocket(wsurl);
  ws.onmessage = websocketonmessage;
  ws.onopen = websocketonopen;
  ws.onerror = websocketonerror;
  ws.onclose = websocketclose;
};

// 发送数据
let sendData = (data, callback) => {
  weboscket_data = userInfo.id + data;//利用用户id+传递字段构成唯一参数(根据自己项目需求而定)
  weboscket_callback = callback;
  //  判断 data 数据类型
  if (!(typeof data == "string")) {
    data = JSON.stringify(data);
  }
  //  判断 websocket 的状态
  if (ws && ws.readyState === ws.OPEN) {
    // 已经打开,可以直接发送
    ws.send(data);
  } else if (ws && ws.readyState === ws.CONNECTING) {
    // 正在开启状态中,则 1 秒后重新发送
    setTimeout(() => {
      ws.send(data);
    }, 1000);
  } else {
    // 未打开,则开启后重新调用
    initWebSocket();
    sendData(data, callback);
  }
};
// 导出
export { initWebSocket, sendData, closewebsocket };

在要使用进度条的界面引入

import { sendData, closewebsocket } from "@/static/websocket";

进度条样式(这里用的是element里的)  

 

 <el-progress :percentage="progressVal"></el-progress>

progressVal默认0

方法

initWebSocket() {
      if (typeof WebSocket === "undefined") {
        this.$message.warning("您的浏览器不支持socket");
      } else {
        closewebsocket();
        //初始化weosocket
        sendData(submitScoketType, this.websocketonmessage);
        //submitScoketType:动态参数跟后端沟通好后定义
      }
    },
    websocketonmessage(e) {
      //数据接收
      const redata = JSON.parse(e.data);
      if (redata > this.progressVal) {
        this.progressVal = redata;
      }
    },

可在mounted中调用this.initWebSocket()

最后在调用保存接口时传递与后端定义好的参数即可 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值