|
1
|
import store from '@/store/'
|
|
2
|
import {ACCESS_TOKEN} from '@/store/mutation-types'
|
|
3
4
5
6
7
8
9
10
11
12
|
import Vue from 'vue'
export const WebsocketMixin = {
mounted() {
this.initWebSocket();
},
destroyed: function () {
// 离开页面生命周期函数
this.websocketOnclose();
},
|
|
13
|
methods: {
|
|
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;
|
|
19
|
if (!this.socketUrl.startsWith('/')) {
|
|
20
21
|
this.socketUrl = '/' + this.socketUrl
}
|
|
22
|
if (!this.socketUrl.endsWith('/')) {
|
|
23
24
|
this.socketUrl = this.socketUrl + '/'
}
|
|
25
|
var url = window._CONFIG['domianURL'].replace("https://", "wss://").replace("http://", "ws://") + this.socketUrl + userId + "/" + token;
|
|
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;
|
|
52
|
if (that.lockReconnect) return;
|
|
53
54
55
56
57
58
59
60
61
62
63
|
that.lockReconnect = true;
//没连接上会一直重连,设置延迟避免请求过多
setTimeout(function () {
console.info("尝试重连...");
that.initWebSocket();
that.lockReconnect = false;
}, 5000);
},
}
}
|