// websocket通信
getWebsocketData(){
let wsurl = `ws://10.88.xxx/ws/dgw`
this.websocket = new WebSocket(wsurl)
this.websocket.onopen = this.websocketonopen
// this.websocket.onclose // 断开连接
},
// 连接websocket
websocketonopen(event){
this.websocket.send("D2018112700129"); //给我传一个设备Id 或者Ip(上层页面没有确定,这两个参数后端都兼容)
this.websocket.onmessage = this.websocketonmessage
},
//websocket接受服务器推送的消息
websocketonmessage(event){
this.websocketData = JSON.parse(event.data)
// websocket返回与pieObj比较是否有变化
// console.log('this.websocketData',this.websocketData)
},
2.自动断开重新连接
2.1心跳重连机制(考虑网络因素)
心跳机制是每隔一段时间会向服务器发送一个数据包,告诉服务器自己还活着,同时客户端会确认服务器端是否还活着,如果还活着的话,就会回传一个数据包给客户端来确定服务器端也还活着,否则的话,有可能是网络断开连接了。需要重连~
var WebSocket = {};
WebSocket.init = function(uri) {
this.wsUri = uri;
this.lastHeartBeat = new Date().getTime();
this.overtime = 8000;
initChannelData();
WebSocket.websocket = new WebSocket(WebSocket.wsUri);
WebSocket.websocket.onopen = function(evt) {
onOpen(evt)
};
WebSocket.websocket.onclose = function(evt) {
onClose(evt)
};
WebSocket.websocket.onmessage = function(evt) {
onMessage(evt)
};
WebSocket.websocket.onerror = function(evt) {
onError(evt)
};
setInterval(checkConnect,5000);
}
function checkConnect() {
doSend("{'event':'ping'}");
if ((new Date().getTime() - WebSocket.lastHeartBeat) > WebSocket.overtime) {
reConnect();
}
}
function onMessage(e) {
WebSocket.lastHeartBeat = new Date().getTime();
}
/**
* 重新连接
* */
function reConnect(){
console.log("socket 连接断开,正在尝试重新建立连接");
WebSocket.init("");
}
2.2onclose失去连接重连机制(不考虑网路因素)
在onclose回调事件中再次连接
var WebSocket = {};
WebSocket.init = function(uri) {
this.wsUri = uri;
this.lastHeartBeat = new Date().getTime();
this.overtime = 8000;
initChannelData();
WebSocket.websocket = new WebSocket(WebSocket.wsUri);
WebSocket.websocket.onopen = function(evt) {
onOpen(evt)
};
WebSocket.websocket.onclose = function(evt) {
onClose(evt)
};
WebSocket.websocket.onmessage = function(evt) {
onMessage(evt)
};
WebSocket.websocket.onerror = function(evt) {
onError(evt)
};
}
/**
* 重新连接
* */
function reConnect(){
console.log("socket 连接断开,正在尝试重新建立连接");
WebSocket.init("");
}
function onClose(evt) {
console.log("DISCONNECTED")
reConnect();
}