From e5ed7cf47bcf470592fca20690f559cd68d40d12 Mon Sep 17 00:00:00 2001 From: zhangshuai Date: Fri, 8 Nov 2024 14:58:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ASW-148=20=E6=96=AD=E5=BC=80=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=90=8E=E5=85=B3=E9=97=AD=E6=A3=80=E6=B5=8B=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EnvironmentNovncWebSocketHandler.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/geedge/asw/common/config/websocket/EnvironmentNovncWebSocketHandler.java b/src/main/java/net/geedge/asw/common/config/websocket/EnvironmentNovncWebSocketHandler.java index cf377ea..e09ffa3 100644 --- a/src/main/java/net/geedge/asw/common/config/websocket/EnvironmentNovncWebSocketHandler.java +++ b/src/main/java/net/geedge/asw/common/config/websocket/EnvironmentNovncWebSocketHandler.java @@ -64,14 +64,15 @@ public class EnvironmentNovncWebSocketHandler extends TextWebSocketHandler { this.userId = (String) session.getAttributes().get("userId"); Constants.ENV_NOVNC_WEBSOCKET_SESSION.put(sessionId, session); lastReceivedTime = System.currentTimeMillis(); // 初始化接收时间 - startConnectionMonitor(session); + Thread checkSessionTimeout = startConnectionMonitor(session); + session.getAttributes().put("checkSessionTimeoutThread", checkSessionTimeout); } - private void startConnectionMonitor(WebSocketSession session) { - Thread.ofVirtual().start(() -> { + private Thread startConnectionMonitor(WebSocketSession session) { + Thread thread = Thread.ofVirtual().start(() -> { while (true) { - if (System.currentTimeMillis() - lastReceivedTime > sessionTimeout) { - try { + try { + if (System.currentTimeMillis() - lastReceivedTime > sessionTimeout) { if (session.isOpen()) { log.info("current no connection info, clean no real use connection finshed, sessionId: {}", sessionId); @@ -83,14 +84,17 @@ public class EnvironmentNovncWebSocketHandler extends TextWebSocketHandler { session.close(CloseStatus.NORMAL.withReason("current no connection info, clean no real use connection finshed.")); break; } - // 每5分钟检查一次 - Thread.sleep(300000); - } catch (Exception e) { - log.error(e, "Error clean no real use connection"); } + Thread.sleep(300000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } catch (IOException e) { + log.error(e, "Error clean no real use connection"); } } }); + return thread; } @@ -188,6 +192,11 @@ public class EnvironmentNovncWebSocketHandler extends TextWebSocketHandler { if (envWebsocket != null) { envWebsocket.sendClose(WebSocket.NORMAL_CLOSURE, "Normal closure"); } + + Thread checkSessionTimeoutThread = (Thread) session.getAttributes().get("checkSessionTimeoutThread"); + if (checkSessionTimeoutThread != null) { + checkSessionTimeoutThread.interrupt(); + } Constants.ENV_NOVNC_WEBSOCKET_SESSION.remove(sessionId); super.afterConnectionClosed(session, status); }