梳理websocket

114 阅读2分钟

// 1.建立socket链接

scoket构造函数

  • 请求地址参数获取

  • websocket实例

  • websocket 状态

  • 类需要的参数,把类的参数传入这里,方便调用

  • 重连计时器

  • 心跳计时器

  • 信息onmessage缓存方法

  • 心跳时间 5秒一次

  • 是否自动重连

  • 重连间隔时间

  • 重连次数

  • 记录是否正在重新连接

constructor(params = {}) {
    var ishttps = "https:" == document.location.protocol ? true : false;
    if (ishttps) {
      params["url"] = process.env.VUE_APP_SOCKET_URL_WSS;
    } else {
      params["url"] = process.env.VUE_APP_SOCKET_URL_WS;
    }
    this.ws = null; /* websocket实例 */
    this.alive = null; /* 状态 */
    this.params = params; /* 把类的参数传入这里,方便调用 */
    this.reconnect_timer = null; /* 重连计时器 */
    this.heart_timer = null; /* 心跳计时器 */
    this.message_func = null; /* 信息onmessage缓存方法 */
    this.heartBeat = 5000; /* 心跳时间 5秒一次 */
    /* 心跳信息 */
    this.reconnect = true; /* 是否自动重连 */
    this.reconnectTime = 5000; /* 重连间隔时间 */
    this.reconnectTimes = 0; /* 重连次数 */
    this.allTimes = 20;
    this.reconnecting = false; // 记录是否正在重新连接
    this.heartBeats = 1;
  }

初始化websocket socketjs.init();

//重中之重,不然重连的时候会越来越快

  • 清除重连计数器,清除心跳计数器

  • 取出实例中的参数

  • 设置连接路径

socketMsg.onMessage();

// 2. 恢复现场数据

socketHttp.init();

清除定时器(重连定时器,心跳计时器)

初始化参数

websocket实例

服务器地址参数

token检测

获取token

创建带有服务器地址的 websocket 实例,客户端就会与服务器进行连接

信息缓存方法如果有,就调用 onmessage 方法

websocket实例默认连接成功后的回调函数

  • 连接成功后,心跳次数计数为 1 ,
  • 如果重连标识符为 true ,说明需要重连,此时重连成功后,需要把标识符改为 false

连接后进入心跳状态

  • 如果心跳次数大于3,存活状态赋值为false , 开启重连计时器
  • 如果状态存活 this.alive为true
  • 设置心跳定时器,5秒一次,发送存活状态和userId,心跳计数器累加 1 ,、
  • 心跳状态中的函数执行

websocket实例默认连接关闭后的回调函数

  • 实例对象的 onclose属性,用于指定连接关闭后的回调函数
  • 设置实例状态为断开 this.alive 为false
  • 清除心跳定时器
  • 当重连标识符为 true 时,开启重连

// 接收服务器推送来得消息处理 socketMsg.onMessage();

该函数调用 socketjs.onmessage(func)

onmessage方法中,给实例 onmessage 方法 即[this.ws.onmessage] 获取从服务器中传输来的 data

缓存 信息onmessage缓存方法, 执行func这个函数

根据不同actiontype,执行对应的action(登录成功,创建会话,终止会话,创建监控对话,监控对话结束,访客进入排队,排队超时,坐席消息,同事消息....)

// 2. 恢复现场数据 socketHttp.init();

获取会话列表

获取排队列表