zoukankan      html  css  js  c++  java
  • 封装socket 到vue2.x 使用

    vue2.x 使用 socket 数据交互

    简单封装 socket

    //生成唯一标识符
    function getUuid {
      let s = [];
      let hexDigits = "0123456789abcdef";
      for (let i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
      }
      s[14] = "4";
      s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
      s[8] = s[13] = s[18] = s[23] = "-";
      return s.join("");
    };
    
    class socketClient {
      wsUrl = "";
      wsAuto = {};
      websocket = null;
      constructor(wsUrl, wsAuto) {
        this.wsUrl = wsUrl;
        this.wsAuto = wsAuto;
      }
      // 初始化socket
      initWebSocket() {
        this.websocket = new WebSocket(this.wsUrl);
        console.log("========= create websocket ===========");
        this.wsOpen().then((res) => {
          console.log("========= onopen websocket ===========", res);
          this.wsSend(this.wsAuto);
          console.log("========= 授权完成 ===========");
        });
    
        this.websocket.onerror = (evt) => {
          console.log("========= 连接错误 ===========", evt);
        };
    
        this.websocket.onclose = (evt) => {
          console.log("========= 客户端断开连接 ===========", evt);
        };
      }
      // 打开连接
      wsOpen() {
        if (this.websocket) {
          return new Promise((resolve, reject) => {
            try {
              this.websocket.onopen = (evt) => {
                resolve(evt);
              };
            } catch (err) {
              reject(err);
            }
          });
        }
      }
      // 关闭连接
      wsClose() {
        if (this.websocket) {
          this.websocket.close();
          return new Promise((resolve, reject) => {
            try {
              this.websocket.onclose = (evt) => {
                console.log("========= 客户端断开连接 ===========", evt);
                resolve(evt);
              };
            } catch (err) {
              reject(err);
            }
          });
        }
      }
      // 监听消息
      wsMessage(callback) {
        // 需要监听的消息路径
        if (this.websocket) {
          try {
            this.websocket.onmessage = (evt) => {
              // 判断是否有 data 数据
              if (evt.data) {
                let data = evt.data;
                if (this.isJsonString(data)) {
                  callback(JSON.parse(data));
                }
              }
            };
          } catch (err) {
            callback(err);
          }
        }
      }
      // 发送消息
      wsSend(options, isFile = false) {
        if (this.websocket) {
          try {
            if (isFile) {
              let params = { ...options };
              params.RequestId = getUuid();
              this.websocket.send(params);
            } else {
              this.websocket.send(JSON.stringify(options));
            }
          } catch (e) {
            console.log('错误', e)
          }
        }
      }
      // 连接因错误而关闭时触发
      wsOnerror() {
        if (this.websocket) {
          return new Promise((resolve, reject) => {
            try {
              this.websocket.onerror = (evt) => {
                resolve(evt);
              };
            } catch (err) {
              reject(err);
            }
          });
        }
      }
      // 判断是否是json字符串
      isJsonString(str) {
        try {
          if (typeof JSON.parse(str) == "object") {
            return true;
          }
        } catch (e) {
          console.log("isJsonString:错误捕获");
        }
        return false;
      }
    }
    
    export { socketClient };
    

    在 main.js 上引用

    // ********** socket **********
    import { socketClient } from "./utils/socket";
    // 初始化 socket
    const ws_wyf_url = "ws://xxx.xxx.xxx.xxx:8080/conn?u=123ad";
    const wsAuto = {
      appId: "xxxx",
      appSecret: "xxxxxxx"
    };
    const wsocket = new socketClient(ws_wyf_url, wsAuto);
    wsocket.initWebSocket();
    Vue.prototype.$ws = wsocket;
    

    vue2.x 组件使用

    <script>
      created() {
          // 监听消息
          this.$ws.wsMessage((res) => {
              console.log(res)
          });
      },
    
      // 发送消息
      let parm = {
          name:"asd"
      }
      this.$ws.wsSend(patm);
    </script>
    
  • 相关阅读:
    答读者问(10):有关对博客的评价及个人技术发展路线等问题
    EasyUI学习之menu and button(菜单和按钮)
    二分查找
    【Android UI】色板
    很好的理解遗传算法的样例
    关于提高UDP发送效率的方法
    Log4cpp介绍及使用
    四个好看的CSS样式表格
    SpringMVC+easyUI 分页,查询 (完整的CRUD)
    [MODX] 1. Template *
  • 原文地址:https://www.cnblogs.com/sjie/p/14442754.html
Copyright © 2011-2022 走看看