zoukankan      html  css  js  c++  java
  • 如何再vue中使用 WebSocket?

    websockt 最大的优势就是后端能够向前端实时推送数据,而前端只需要一个监听,就能够实现数据的相应变化
    <template> <div> <button @click="freeLowControl">弹出下控页面</button> <!-- 下控弹框 --> <el-dialog title="提示" :visible.sync="dialogVisibleCtl" width="30%"> <div style="text-align:left"> <p class="lineHeight">是否确认下控 ?</p> <p class="lineHeight"> <p>日志信息:</p> <p style="color:red" v-html="record"></p> </p> </div> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisibleCtl = false" size="mini">关 闭</el-button> <el-button type="primary" @click="saveControlSing" size="mini" :loading="loading" id="contrlBtn">确 定</el-button> </span> </el-dialog> </div> </template> <script> export default { data() { return { soket: "", socktPath: "", //WebSocket地址, sendVal: "", //发送数据 dialogVisibleCtl: false }; }, methods: { //初始化webSockt initWebsocket() { this.socktPath = window.$url_front.webSocketUrl + "/socketServer/" + JSON.parse(localStorage.userMsg).id; if (typeof WebSocket === "undefined") { alert("您的浏览器不支持socket"); } else { // 实例化socket this.socket = new WebSocket(this.socktPath); //监听socket连接; this.socket.onopen = this.open; // 监听socket错误信息 this.socket.onerror = this.error; // 监听socket消息 this.socket.onmessage = this.getMessage; // 关闭连接 this.socket.onclose = this.close; } },
      //websocket连接成功的回调方法 open() { console.log("socket连接成功", this.socket);
       //每次连接成功,把上次交互所保存的信息给删除掉,将loading设为false,允许操作; this.record = "";
        this.loading = false;
        //连接成功后,向后端发送数据 this.sendData(); },
      //websocket连接失败的回调方法 error() { console.log("连接失败.");
        //设置record以及loading为true,不让用户继续操作 this.record = "ws连接失败...";
        this.loading = true;
       },
      //websocket获取数据的回调方法 getMessage(msg) { this.record = msg.data; console.log("返回数据=========", msg); }, sendData() { this.sendVal = "underControl;" + JSON.parse(localStorage.userMsg).id + ";" + String(new Date().getTime()); //前端和后端做一个约定,来确定发送数据的格式;非常关键 this.sendTime = String(new Date().getTime()); //发送数据
       // this.socket.readyState : 一般情况 0代表连接成功 1代表失败 if (this.socket.readyState == 1) { this.socket.send(this.sendVal); } }, freeLowControl() { this.dialogVisible = true;
        this.initWebSocket() }, //下控确定 saveControlSing() { //socket.readyState 是否连接成功 let contrlBtn = document.getElementById("contrlBtn"); contrlBtn.innerHTML = "请求中..."; this.loading = true; setTimeout(() => { if (this.socket.readyState == 1) { let pointArr = this.tablePoint.pointDataList; let pointList = []; pointArr.forEach(item => { let obj = {}; obj.data_id = item.data_id; obj.value = item.lowControlVal; pointList.push(obj); }); let parm = { token: this.token, points_values: JSON.stringify(pointList), wid: this.sendTime }; api_lak.underControlByFree(qs.stringify(parm)).then(res => { if (res) { this.$emit("refreshDataSet", this.tablePoint.under_id);
             //成功后 设置loading为false 允许用户的下次操作
    this.loading = false;
              contrlBtn.innerHTML = "确定";
            } }); } else { this.$message({ message: "webSocket连接失败", type: "error" }); this.$emit("refreshDataSet", this.tablePoint.under_id); } }, 1000); } } }; </script>

      

  • 相关阅读:
    Javascript FP-ramdajs
    微信小程序开发
    SPA for HTML5
    One Liners to Impress Your Friends
    Sass (Syntactically Awesome StyleSheets)
    iOS App Icon Template 5.0
    React Native Life Cycle and Communication
    Meteor framework
    RESTful Mongodb
    Server-sent Events
  • 原文地址:https://www.cnblogs.com/wangqi2019/p/12553394.html
Copyright © 2011-2022 走看看