$(function () {
createWebSocket(wsServer);//建立socket連接
});
//WebSocket連接後臺開始
var lockReconnect = false; //避免ws重複連接
var ws = null;
var wsServer = "";//ws地址
var httpServer = "";//http地址
//創建WebSocket對象
function createWebSocket(wsServer){
if ('WebSocket' in window) {
ws = new WebSocket(wsServer);
} else if ('MozWebSocket' in window) {
ws = new MozWebSocket(wsServer);
} else {
ws = new SockJS(httpServer);
}
// Socket創建並連接
ws.onopen = function(evt) {
heartCheck.reset().start();
// layer.msg("已建立連接正在聊天", {
// offset : 0
// });
//return;
};
// Socket 消息傳遞監聽
ws.onmessage = function(evt) {
heartCheck.reset().start();
analysisMessage(evt.data); //解析後臺傳回的消息,並予以展示
};
// Socket異常監聽
ws.onerror = function(evt) {
console.log("產生Socket異常");
reconnect(wsServer);
};
// Socket關閉監聽
ws.onclose = function(evt) {
console.log("已關閉Socket連接");
reconnect(wsServer);
//return;
};
//WebSocket連接後臺結束
}
function reconnect(url) {
if(lockReconnect) {
return;
}
lockReconnect = true;
setTimeout(function () {
createWebSocket(url);
lockReconnect = false;
}, 2000);
}
/**
* 發送信息給後臺
*/
function sendMessage() {
if (ws == null) {
layer.msg("未開啓Socket連接!", {
offset : 0,
shift : 6
});
return;
}
var message = $("#message").val();
if (message == null || message == "") {
layer.msg("發送內容不能爲空!", {
offset : 0,
shift : 6
});
return;
}
// 客戶端向服務端發送消息
ws.send(JSON.stringify({
message : {
//發送的消息內容給服務器
}
}));
}
//解析後臺傳回的消息,並予以展示
function analysisMessage(message) {
console.log(JSON.parse(message))
message = JSON.parse(message);
}
//心跳檢測
var heartCheck = {
timeout: 60000,//60秒
timeoutObj: null,
reset: function(){
clearTimeout(this.timeoutObj);
return this;
},
start: function(){
this.timeoutObj = setTimeout(function(){
//onmessage拿到返回的心跳就說明連接正常
console.log("心跳檢測");
ws.send("心跳檢測");
}, this.timeout)
}
}