Blame view

ant-design-vue-jeecg/src/mixins/WebsocketMixin.js 1.93 KB
肖超群 authored
1
import store from '@/store/'
肖超群 authored
2
import {ACCESS_TOKEN} from '@/store/mutation-types'
肖超群 authored
3
4
5
6
7
8
9
10
11
12
import Vue from 'vue'

export const WebsocketMixin = {
  mounted() {
    this.initWebSocket();
  },
  destroyed: function () {
    // 离开页面生命周期函数
    this.websocketOnclose();
  },
肖超群 authored
13
  methods: {
肖超群 authored
14
15
16
17
18
    initWebSocket: function () {
      let token = Vue.ls.get(ACCESS_TOKEN)
      console.log("------------WebSocket连接成功");
      // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https
      var userId = store.getters.userInfo.id;
肖超群 authored
19
      if (!this.socketUrl.startsWith('/')) {
肖超群 authored
20
21
        this.socketUrl = '/' + this.socketUrl
      }
肖超群 authored
22
      if (!this.socketUrl.endsWith('/')) {
肖超群 authored
23
24
        this.socketUrl = this.socketUrl + '/'
      }
肖超群 authored
25
      var url = window._CONFIG['domianURL'].replace("https://", "wss://").replace("http://", "ws://") + this.socketUrl + userId + "/" + token;
肖超群 authored
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
      this.websock = new WebSocket(url);
      this.websock.onopen = this.websocketOnopen;
      this.websock.onerror = this.websocketOnerror;
      this.websock.onmessage = this.websocketOnmessage;
      this.websock.onclose = this.websocketOnclose;
    },
    websocketOnopen: function () {
      console.log("WebSocket连接成功");
    },
    websocketOnerror: function (e) {
      console.log("WebSocket连接发生错误");
      this.reconnect();
    },
    websocketOnclose: function (e) {
      this.reconnect();
    },
    websocketSend(text) {
      // 数据发送
      try {
        this.websock.send(text);
      } catch (err) {
        console.log("send failed (" + err.code + ")");
      }
    },
    reconnect() {
      var that = this;
肖超群 authored
52
      if (that.lockReconnect) return;
肖超群 authored
53
54
55
56
57
58
59
60
61
62
63
      that.lockReconnect = true;
      //没连接上会一直重连,设置延迟避免请求过多
      setTimeout(function () {
        console.info("尝试重连...");
        that.initWebSocket();
        that.lockReconnect = false;
      }, 5000);
    },
  }

}