修改WebSocket实现

pull/76/head
rays 2021-06-03 16:02:15 +08:00
parent a83e9f681a
commit 0f84522c9b
4 changed files with 69 additions and 23 deletions

View File

@ -135,6 +135,13 @@
<version>${roses.kernel.version}</version> <version>${roses.kernel.version}</version>
</dependency> </dependency>
<!--Socket模块-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>socket-spring-boot-starter</artifactId>
<version>${roses.kernel.version}</version>
</dependency>
<!--wrapper工具--> <!--wrapper工具-->
<dependency> <dependency>
<groupId>cn.stylefeng.roses</groupId> <groupId>cn.stylefeng.roses</groupId>

View File

@ -2,6 +2,11 @@ server:
port: 8080 port: 8080
max-http-header-size: 10240 max-http-header-size: 10240
logging:
level:
root: error
cn.stylefeng: debug
spring: spring:
application: application:
name: guns name: guns
@ -54,10 +59,6 @@ mybatis-plus:
id-type: assign_id id-type: assign_id
table-underline: true table-underline: true
# 是否开启websocket推送消息
web-socket:
open: true
# 单点登录开关 # 单点登录开关
sso: sso:
openFlag: false openFlag: false

View File

@ -50,7 +50,11 @@ layui.define(['jquery', 'layer'], function (exports) {
_self.heartCheckHandler = setTimeout(function () { _self.heartCheckHandler = setTimeout(function () {
try { try {
// 发送心跳检测 // 发送心跳检测
_self.send("&") let heartMsg = {
"type": "299999",
"data": new Date().getMilliseconds()
};
_self.send(JSON.stringify(heartMsg))
} catch (e) { } catch (e) {
(param.connectErr || emptyFun)(e); (param.connectErr || emptyFun)(e);
_self.lockReconnect = false; _self.lockReconnect = false;

View File

@ -37,14 +37,40 @@
var Feng = { var Feng = {
ctxPath: "${ctxPath}", ctxPath: "${ctxPath}",
version: '${constants.getReleaseVersion()}', version: '${constants.getReleaseVersion()}',
wsUrl: '${wsUrl}' wsUrl: '${wsUrl}',
userId: '${userId}'
}; };
</script> </script>
<script type="text/javascript" src="${ctxPath}/assets/common/libs/layui/layui.js?v=${constants.getReleaseVersion()}"></script> <script type="text/javascript" src="${ctxPath}/assets/common/libs/layui/layui.js?v=${constants.getReleaseVersion()}"></script>
<script type="text/javascript" src="${ctxPath}/assets/common/js/common.js?v=${constants.getReleaseVersion()}"></script> <script type="text/javascript" src="${ctxPath}/assets/common/js/common.js?v=${constants.getReleaseVersion()}"></script>
<script> <script>
// WebSocket实例
var wsInst = null var wsInst = null
// 全局消息类型声明
const WEB_SOCKET_MSG_TYPE = {
SERVER: {
SYS_NOTICE_MSG_TYPE: "100001"
},
CLIENT: {
USER_ADD_MSG_TYPE: "200001"
}
}
// 全局消息类型和回调函数维护中心
const msgTypeCallBackMap = new Map()
// 新增一个回调
function insertCallback(msgType, func) {
msgTypeCallBackMap.set(msgType, func)
}
// 删除一个回调
function deleteCallback(msgType) {
msgTypeCallBackMap.delete(msgType)
}
layui.use(['layer', 'element', 'admin', 'index', 'HttpRequest', 'ws', 'notice', 'i18n'], function () { layui.use(['layer', 'element', 'admin', 'index', 'HttpRequest', 'ws', 'notice', 'i18n'], function () {
var $ = layui.jquery; var $ = layui.jquery;
var layer = layui.layer; var layer = layui.layer;
@ -100,6 +126,8 @@
}); });
request.start(); request.start();
}); });
// 全局WebSocket加载
wsInst = ws.render({ wsInst = ws.render({
wsUrl: Feng.wsUrl, //WebSocket的地址 wsUrl: Feng.wsUrl, //WebSocket的地址
connectErr: function (event) { connectErr: function (event) {
@ -110,21 +138,23 @@
//发生连接错误回调 //发生连接错误回调
}, },
onWsOpen: function (event) { onWsOpen: function (event) {
//连接成功回调 // 绑定用户
console.log("Socket 已打开"); let initMsg = {
wsInst.send("消息发送测试(From Client)"); "type": WEB_SOCKET_MSG_TYPE.CLIENT.USER_ADD_MSG_TYPE,
"formUserId": Feng.userId,
"data": WEB_SOCKET_MSG_TYPE.SERVER.SYS_NOTICE_MSG_TYPE
};
wsInst.send(JSON.stringify(initMsg));
}, },
onWsMessage: function (event) { onWsMessage: function (event) {
//服务器发送消息回调 //服务器发送消息回调
let data = event.data; let data = event.data;
try { try {
let msg = JSON.parse(data) let originalData = JSON.parse(data)
notice.info({ let func = msgTypeCallBackMap.get(originalData.type);
title: '[' + msg.businessTypeValue + ']' + msg.messageTitle, if (func) {
message: msg.messageContent, eval(func(originalData));
timeout: false }
});
$('#messageDot').show();
} catch (e) { } catch (e) {
} }
}, },
@ -135,15 +165,19 @@
wsSend: function (event) { wsSend: function (event) {
//发送成功后的回调 //发送成功后的回调
}, },
}) })
});
window.unload = function () { // 注册系统消息监听
if (wsInst) { insertCallback(WEB_SOCKET_MSG_TYPE.SERVER.SYS_NOTICE_MSG_TYPE, function (massage) {
wsInst.close(); notice.info({
} title: '[' + massage.data.businessTypeValue + ']' + massage.data.messageTitle,
}; message: massage.data.messageContent,
timeout: false
});
$('#messageDot').show();
})
});
</script> </script>
</body> </body>