JavaScript-WebSocket
JavaScript-WebSocket
這篇介紹JavaScript-WebSocket。
Example:
/* global postAjax /
/ global ObjectUtil /
/ global $j */
// eslint-disable-next-line no-var
var MobileWebSocket = (function mobileWebSocket() {
let webSocket = null;
let count = 0;
const createWebSocket = () => {
if (ObjectUtil.isObject(webSocket)) {
return;
}
postAjax({
url: "API Path",
data: {
},
success(response) {
if (response.status === "200") {
if ("WebSocket" in window) {
let tempWS = null;
if (window.location.protocol === "https:") {
tempWS = new WebSocket("wss://" + window.location.hostname + response.path + "?token=" + response.token);
} else {
tempWS = new WebSocket("ws://" + window.location.hostname + ":" + window.location.port + response.path + "?token=" + response.token);
}
tempWS.onerror = () => {
console.warn("WebSocket error");
if (ObjectUtil.isObject(webSocket)) {
webSocket.close();
}
webSocket = null;
};
tempWS.onopen = () => {
heartCheck.start();
console.log("WebSocket connected");
};
tempWS.onmessage = (event) => {
count = 0;
//Do something action
};
tempWS.onclose = () => {
console.log("WebSocket closed");
if (ObjectUtil.isObject(webSocket)) {
webSocket.close();
}
webSocket = null;
};
webSocket = tempWS;
window.onbeforeunload = () => {
try {
webSocket.close();
} catch (e) {
// nothing to be done
}
};
} else {
console.log("webSocket is not supported");
}
}
}
});
};
const heartCheck = {
heartbeatTimeout: 10000, // ms
hearbeatTask: null,
hearbeatContent: "{\"router\":\"heartbeat\"}",
start() {
if (ObjectUtil.isObject(this.hearbeatTask)) {
clearInterval(this.hearbeatTask);
this.hearbeatTask = null;
}
this.hearbeatTask = setInterval(() => {
console.log("---beat:" + new Date());
try {
count += 1;
if (webSocket === null) {
count = 0;
createWebSocket();
return;
}
if (count >= 3) {
count = 0;
if (ObjectUtil.isObject(webSocket)) {
webSocket.close();
}
webSocket = null;
return;
}
if (ObjectUtil.isObject(webSocket)) {
webSocket.send(this.hearbeatContent);
}
} catch (e) {
// nothing to be done
}
}, this.heartbeatTimeout);
}
};
heartCheck.start();
const connect = () => {
createWebSocket();
};
return {
connect
};
}());