From 3121440c1b29c555e817055723de656509c9c752 Mon Sep 17 00:00:00 2001 From: liuhanqing <447067298@qq.com> Date: Tue, 26 Jan 2021 19:25:00 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90message=E3=80=91websocket=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../expand/module/webSocket/webSocket.js | 40 +++++++++++++++---- .../assets/modular/system/index/message.js | 1 + src/main/webapp/pages/index.html | 27 +++++++++---- src/main/webapp/pages/layout/_header.html | 4 +- .../pages/modular/system/index/message.html | 2 +- 5 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/main/webapp/assets/expand/module/webSocket/webSocket.js b/src/main/webapp/assets/expand/module/webSocket/webSocket.js index ab9a20ca..be271fb9 100644 --- a/src/main/webapp/assets/expand/module/webSocket/webSocket.js +++ b/src/main/webapp/assets/expand/module/webSocket/webSocket.js @@ -16,7 +16,8 @@ layui.define(['jquery', 'layer'], function (exports) { _self.version = "1.0";//版本 _self.reCount = param.reCount ? param.reCount : 5;//重连次数 _self.lockReconnect = false; //重连标识 - _self.wsReconnectHandler = null; //重连标识 + _self.heartCheckHandler = null; //心跳检测 + _self.wsReconnectHandler = null; //重连处理器 var WebSocket = window.WebSocket || window.MozWebSocket || 0; if (!WebSocket) { _self.result = 0; @@ -27,8 +28,9 @@ layui.define(['jquery', 'layer'], function (exports) { var func = {}; var msgList = [];//等待发送的信息 + + // 连接方法 _self.connect = function () { - debugger try { func.WebSocket = new WebSocket(param.wsUrl); if (func.WebSocket) { @@ -41,8 +43,25 @@ layui.define(['jquery', 'layer'], function (exports) { } } - _self.reconnect = function (msg) { - debugger + // 心跳检测 + _self.heartCheck = function () { + // 15s 发送心跳 + _self.heartCheckHandler && clearTimeout(_self.heartCheckHandler); + _self.heartCheckHandler = setTimeout(function () { + try { + // 发送心跳检测 + _self.send("&") + } catch (e) { + (param.connectErr || emptyFun)(e); + _self.lockReconnect = false; + _self.reconnect() + } + setTimeout(_self.heartCheck, 15000) + }, 15000) + } + + // 重新连接方法 + _self.reconnect = function () { if (_self.lockReconnect || _self.reCount <= 0) { return; } @@ -55,8 +74,9 @@ layui.define(['jquery', 'layer'], function (exports) { _self.lockReconnect = false; }, 1000) } + + // 发送消息方法 _self.send = function (msg) { - debugger var state = func.WebSocket.readyState; if (state > 1) { console.log("连接已经失败,状态码为:" + state); @@ -69,11 +89,13 @@ layui.define(['jquery', 'layer'], function (exports) { func.WebSocket.send(msg); } if (typeof param.WsSend === 'function') { - param.WsSend(msg); + param.wsSend(msg); } } - _self.close = function (a) { + + // 关闭连接方法 + _self.close = function (event) { try { func.WebSocket.close(); } catch (e) { @@ -82,10 +104,12 @@ layui.define(['jquery', 'layer'], function (exports) { } - + // 绑定ws事件 _self.initEventHandle = function () { try { func.WebSocket.onopen = function (event) { + _self.reCount = 5; + _self.heartCheck(); for (var i = 0; i < msgList.length; i++) { func.WebSocket.send(msgList[i]); msgList.shift(); diff --git a/src/main/webapp/assets/modular/system/index/message.js b/src/main/webapp/assets/modular/system/index/message.js index 260cc3cb..dcfae1b0 100644 --- a/src/main/webapp/assets/modular/system/index/message.js +++ b/src/main/webapp/assets/modular/system/index/message.js @@ -20,6 +20,7 @@ layui.use(['element', 'admin', 'HttpRequest', 'func'], function () { var httpRequest = new HttpRequest(Feng.ctxPath + "/sysMessage/allMessageReadFlag", 'get', function (data) { $('#messageClearBtn').parents('.layui-tab-item').addClass('show-empty'); $('#msgCount').html(0); + $('#messageDot').hide(); Feng.success("标记已读成功!"); }, function (data) { Feng.error("标记已读失败!" + data.responseJSON.message); diff --git a/src/main/webapp/pages/index.html b/src/main/webapp/pages/index.html index 0e58e98b..82674252 100644 --- a/src/main/webapp/pages/index.html +++ b/src/main/webapp/pages/index.html @@ -45,13 +45,14 @@ +