From 310df93499a8fcc40a0789ca1f5bbc0bd9e62196 Mon Sep 17 00:00:00 2001 From: mxd <838425805@qq.com> Date: Mon, 28 Feb 2022 23:08:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E7=8A=B6=E6=80=81=E4=BC=9A=E8=87=AA=E5=8A=A8=E6=8E=89?= =?UTF-8?q?=E7=BA=BF=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/ssssssss/magicapi/core/config/MessageType.java | 10 ++++++---- .../magicapi/core/config/WebSocketSessionManager.java | 9 +++++++-- .../core/handler/MagicWebSocketDispatcher.java | 4 +++- .../magicapi/core/handler/MagicWorkbenchHandler.java | 8 +++----- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/config/MessageType.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/config/MessageType.java index 4cfd75a7..c4939bc7 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/config/MessageType.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/config/MessageType.java @@ -23,8 +23,9 @@ public enum MessageType { ONLINE_USERS, /* 通知客户端,他人进入文件*/ INTO_FILE_ID, - /* PONG */ - PONG, + /* ping */ + PING, + /* C -> S message */ /* 设置断点 */ @@ -35,8 +36,9 @@ public enum MessageType { LOGIN, /* 设置当前所在文件 */ SET_FILE_ID, - /* ping */ - PING, + /* PONG */ + PONG, + /* S <-> S -> C message*/ /* 获取当前在线用户 */ diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/config/WebSocketSessionManager.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/config/WebSocketSessionManager.java index b5667a4d..1e6d5b58 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/config/WebSocketSessionManager.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/config/WebSocketSessionManager.java @@ -29,6 +29,10 @@ public class WebSocketSessionManager { private static String instanceId; + private static final int CHECK_INTERVAL = 20; + + private static final int KEEPALIVE_TIMEOUT = 60 * 1000; + private static final List> MESSAGE_CACHE = new ArrayList<>(200); public static void add(MagicConsoleSession session) { @@ -43,7 +47,7 @@ public class WebSocketSessionManager { // 1秒1次发送日志 new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-send-log-task")).scheduleAtFixedRate(WebSocketSessionManager::flushLog, 1, 1, TimeUnit.SECONDS); // 60秒检测一次是否在线 - new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-websocket-clean-task")).scheduleAtFixedRate(WebSocketSessionManager::checkSession, 60, 60, TimeUnit.SECONDS); + new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-websocket-clean-task")).scheduleAtFixedRate(WebSocketSessionManager::checkSession, CHECK_INTERVAL, CHECK_INTERVAL, TimeUnit.SECONDS); } public static Collection getSessions() { @@ -193,8 +197,9 @@ public class WebSocketSessionManager { private static void checkSession() { try { - long activateTime = System.currentTimeMillis() - 20 * 1000; + long activateTime = System.currentTimeMillis() - KEEPALIVE_TIMEOUT; SESSIONS.entrySet().stream() + .peek(it -> WebSocketSessionManager.sendBySession(it.getValue(), WebSocketSessionManager.buildMessage(MessageType.PING))) .filter(it -> it.getValue().getActivateTime() < activateTime) .collect(Collectors.toList()) .forEach(entry -> { diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/handler/MagicWebSocketDispatcher.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/handler/MagicWebSocketDispatcher.java index b67cfd19..befedee8 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/handler/MagicWebSocketDispatcher.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/handler/MagicWebSocketDispatcher.java @@ -104,7 +104,9 @@ public class MagicWebSocketDispatcher extends TextWebSocketHandler { MagicConsoleSession mcsession = MagicConsoleSession.from(session); WebSocketSessionManager.remove(mcsession); MagicConsoleSession.remove(session); - WebSocketSessionManager.sendToAll(MessageType.USER_LOGOUT, mcsession.getAttributes()); + if(mcsession.getClientId() != null && mcsession.getAttributes() != null && !mcsession.getAttributes().isEmpty()){ + WebSocketSessionManager.sendToAll(MessageType.USER_LOGOUT, mcsession.getAttributes()); + } } @Override diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/handler/MagicWorkbenchHandler.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/handler/MagicWorkbenchHandler.java index 787dca78..57547965 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/handler/MagicWorkbenchHandler.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/handler/MagicWorkbenchHandler.java @@ -75,11 +75,9 @@ public class MagicWorkbenchHandler { } } - @Message(MessageType.PING) - public void ping(MagicConsoleSession session){ - long activateTime = System.currentTimeMillis(); - session.setActivateTime(activateTime); - WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.PONG, activateTime)); + @Message(MessageType.PONG) + public void pong(MagicConsoleSession session){ + session.setActivateTime(System.currentTimeMillis()); } private List> getOnlineUsers(){