websocket自带onerror回调,当异常会触发,但是在目前阶段,某些时候浏览器并不会触发,包括chrome,直接close
最好就是加一个心跳检测来判断网络异常
websocket有一个readyState状态值,代表的状态如下(摘自阮一峰博客)
CONNECTING:值为0,表示正在连接
OPEN:值为1,表示连接成功,可以通信了
CLOSING:值为2,表示连接正在关闭
CLOSED:值为3,表示连接已经关闭,或者打开连接失败
当成功建立连接后,即启动心跳检测,大概的流程如下图
画完图觉得很简单,就花了十分钟敲完代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
52
53
54
55
56
57
58var heartCheck = {
timer: 0,
_obj : null,
_callback:null,
init: function(wsObj, callback){
console.log("init");
this._obj = wsObj;
callback && (this._callback = callback);
this.sayHi();
},
sayHi: function(){
clearTimeout(this.timer);
this.timer = setTimeout(() => {
this.onError();
}, 10000);
this._obj.send("hi," + this.