webcoket封装代码

export default class SocketService {
  /**
   * 单例
   */
  static instance = null
  static get Instance() {
    if (!this.instance) {
      this.instance = new SocketService()
    }
    return this.instance
  }

  // 和服务端连接的socket对象
  ws = null
  // 标识是否连接成功
  connected = false
  // 请求数据尝试的次数
  sendRetryCount = 0
  // 重新连接尝试的次数
  connectRetryCount = 0

  // 存储回到函数
  callBackMapping = {}

  // 定义连接服务器的方法
  connect() {
    // 连接服务器
    if (!window.WebSocket) return console.log(‘您的浏览器不支持 WebSocket‘);

    // this.ws = new WebSocket(‘ws://localhost:9998‘)

    // 使用接口地址
    this.ws = new WebSocket(‘ws://120.53.120.229:9998‘)


    // 连接成功的事件
    this.ws.onopen = () => {
      this.connected = true
      this.connectRetryCount = 0
      console.log(‘连接服务端成功了‘);
    }

    // 接收到服务端数据
    this.ws.onmessage = (msg) => {
      // 保存接收到的数据
      const recvData = JSON.parse(msg.data)
      // console.log(‘接收到数据:‘,recvData);
      // 取出业务模块类型
      const socketType = recvData.socketType
      // 判断回调函数是否存在
      if (this.callBackMapping[socketType]) {
        const action = recvData.action
        if (action === ‘getData‘) {
          // 获取数据  realData真实数据
          const realData = JSON.parse(recvData.data)
          // console.log(‘真实数据:‘,realData);
          this.callBackMapping[socketType].call(this, realData)
        } else if (action === ‘fullScreen‘) {
          // 全屏事件
          this.callBackMapping[socketType].call(this, recvData)
        } else if (action === ‘themeChange‘) {
          // 主题切换
          this.callBackMapping[socketType].call(this, recvData)
        }
      }

    }

    // 连接服务端失败
    this.ws.onerror = () => {
      this.connected = false
      console.log(‘连接服务端失败‘);
    }

    // 连接已关闭  当连接成功后:服务器关闭
    this.ws.onclose = () => {
      this.connectRetryCount++
      this.connected = false
      console.log(‘连接已关闭‘);
      setTimeout(() => {
        this.connect()
      }, this.connectRetryCount * 500);
    }
  }

  /**
   * 注册回调函数
   * @param {socketType} 业务模块类型 
   * @param {*} callback 
   */
  registerCallBack(socketType, callback) {
    this.callBackMapping[socketType] = callback
  }

  // 取消某一个回调函数
  unRegisterCallBack(socketType) {
    this.callBackMapping[socketType] = null
  }

  // 发送数据的方法
  send(data) {
    if (this.connected) {
      this.sendRetryCount = 0
      // 调用 webSocket 身上的send方法
      // console.log(‘发送请求:‘,data);
      this.ws.send(JSON.stringify(data))
    } else {
      this.sendRetryCount++

      setTimeout(() => {
        this.send(data)
      }, this.sendRetryCount * 500);
    }

  }
}

webcoket封装代码

上一篇:css动画使用margin和transform的区别,性能优化


下一篇:jquery Ajax跨域请求