From c8699f0bf2cf00fc6191999f61f67df1519ab16c Mon Sep 17 00:00:00 2001 From: liyj <1617420630@qq.com> Date: Thu, 20 Nov 2025 09:09:14 +0800 Subject: [PATCH] =?UTF-8?q?im=E5=88=86=E5=B8=83=E5=BC=8F=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=96=B9=E6=A1=88-=E5=8D=95=E6=9C=BA=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/LocalSessionManager.java | 25 ++------------- .../onchat/MallsuiteImSocketHandler.java | 32 +++++++++++++++++-- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/LocalSessionManager.java b/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/LocalSessionManager.java index a3bb6776..98a83d13 100644 --- a/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/LocalSessionManager.java +++ b/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/LocalSessionManager.java @@ -1,4 +1,5 @@ package com.suisung.mall.im.common.websocket.service; +import com.suisung.mall.im.common.websocket.service.onchat.MallsuiteImSocketHandler; import com.suisung.mall.im.pojo.vo.SendVO; import lombok.Getter; import lombok.Setter; @@ -28,28 +29,8 @@ public class LocalSessionManager { // 本地存储的群组会话 (groupId -> sessions) private ConcurrentHashMap> groupSessions = new ConcurrentHashMap<>(); - - - /** - * 添加用户会话 - */ - public void addUserSession(String userId, WebSocketSession session) { - if (userId == null || session == null) { - log.info("添加用户会话失败: 参数为空"); - return; - } - userSessions.compute(userId, (key, existingSessions) -> { - if (existingSessions == null) { - existingSessions = new CopyOnWriteArrayList<>(); - } -// if (!existingSessions.contains(session)) { -// existingSessions.add(session); -// } - existingSessions.add(session); - return existingSessions; - }); - - log.info("添加用户会话成功: userId={}, sessionId={}", userId, session.getId()); + public LocalSessionManager() { + this.userSessions = MallsuiteImSocketHandler.userSessions; } /** diff --git a/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/onchat/MallsuiteImSocketHandler.java b/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/onchat/MallsuiteImSocketHandler.java index 0d238ce4..2a3d5223 100644 --- a/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/onchat/MallsuiteImSocketHandler.java +++ b/mall-im/src/main/java/com/suisung/mall/im/common/websocket/service/onchat/MallsuiteImSocketHandler.java @@ -22,6 +22,7 @@ import org.springframework.web.socket.*; import java.io.IOException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; public class MallsuiteImSocketHandler implements WebSocketHandler { @@ -33,6 +34,8 @@ public class MallsuiteImSocketHandler implements WebSocketHandler { // private static Map> userSession; // private static Map> groupSession; + public static ConcurrentHashMap> userSessions; + @Autowired private DistributedSessionService distributedSessionService; @@ -45,6 +48,9 @@ public class MallsuiteImSocketHandler implements WebSocketHandler { @Autowired private ChatHistoryService chatHistoryService; + static { + userSessions=new ConcurrentHashMap<>(); + } //用户上线后触发 @Override @@ -55,9 +61,7 @@ public class MallsuiteImSocketHandler implements WebSocketHandler { String sessionId = session.getId(); // 存储到本地会话管理 - ConcurrentHashMap> userSessions=new ConcurrentHashMap<>(); - localSessionManager.setUserSessions(userSessions); - localSessionManager.addUserSession(loginUserId, session); + this.addUserSession(loginUserId, session); logger.info("添加会话到本地成功:{}", localSessionManager.getUserSessions().values()); @@ -334,4 +338,26 @@ public class MallsuiteImSocketHandler implements WebSocketHandler { logger.debug("向 {} 个在线用户发送消息", onlineUserIds.size()); } + + /** + * 添加用户会话 + */ + public void addUserSession(String userId, WebSocketSession session) { + if (userId == null || session == null) { + logger.info("添加用户会话失败: 参数为空"); + return; + } + userSessions.compute(userId, (key, existingSessions) -> { + if (existingSessions == null) { + existingSessions = new CopyOnWriteArrayList<>(); + } +// if (!existingSessions.contains(session)) { +// existingSessions.add(session); +// } + existingSessions.add(session); + return existingSessions; + }); + + logger.info("添加用户会话成功: userId={}, sessionId={}", userId, session.getId()); + } } \ No newline at end of file