websocket是前后端通信的一种方式但又不像Ajax那样直接请求,websocket一般用于后端推送数据前端接收,昨天项目中用到了并且要展示拿到的数据
var lockReconnect = false; //避免重复连接
let ip = '127.0.0.1:80/alarmNotify'
var wsUrl = "ws://" + ip;
var ws;
var tt;
let newData;
function createWebSocket(wsUrl) {
try {
ws = new WebSocket(wsUrl);
init();
} catch (e) {
reconnect(wsUrl);
}
}
function init() {
ws.onclose = function () {
reconnect(wsUrl);
};
ws.onerror = function () {
reconnect(wsUrl);
};
ws.onopen = function () {
//心跳检测重置
// heartCheck.start();
};
ws.onmessage = function (event) {
if (event.isTrusted && event.data != "连接成功") {
var data = JSON.parse(event.data);
console.log(data)

}
//拿到任何消息都说明当前连接是正常的
}
}
function reconnect(url) {
if (lockReconnect) {
return;
};
lockReconnect = true;
//没连接上会一直重连,设置延迟避免请求过多
tt && clearTimeout(tt);
tt = setTimeout(function () {
createWebSocket(url);
lockReconnect = false;
}, 4000);
}
/**
* websocket心跳检测
*/
var heartCheck = {
timeout: 10000,
timeoutObj: null,
serverTimeoutObj: null,
reset: function () {
clearTimeout(this.timeoutObj);
clearTimeout(this.serverTimeoutObj);
return this;
},
start: function () {
var self = this;
this.timeoutObj && clearTimeout(this.timeoutObj);
this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
this.timeoutObj = setTimeout(function () {
//这里发送一个心跳,后端收到后,返回一个心跳消息,
//onmessage拿到返回的心跳就说明连接正常
ws.send("ping");
self.serverTimeoutObj = setTimeout(function () { // 如果超过一定时间还没重置,说明后端主动断开了
ws
.close(); //如果onclose会执行reconnect,我们执行 websocket.close()就行了.如果直接执行 reconnect 会触发onclose导致重连两次
}, self.timeout)
}, this.timeout)
}
};
createWebSocket(wsUrl);
WebSocket作为前后端通信的一种技术,常用于后端数据推送,而前端负责接收并展示。本文介绍了在项目中使用WebSocket实现数据接收的具体应用。
2571

被折叠的 条评论
为什么被折叠?



