im问题修复

This commit is contained in:
liyj 2025-11-18 11:12:47 +08:00
parent 3d8a84126d
commit e79b5727b3
3 changed files with 22 additions and 21 deletions

View File

@ -1,5 +1,7 @@
package com.suisung.mall.im.common.websocket.service; package com.suisung.mall.im.common.websocket.service;
import com.suisung.mall.im.pojo.vo.SendVO; import com.suisung.mall.im.pojo.vo.SendVO;
import lombok.Getter;
import lombok.Setter;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -19,10 +21,14 @@ public class LocalSessionManager {
private static final Logger log = LoggerFactory.getLogger(LocalSessionManager.class); private static final Logger log = LoggerFactory.getLogger(LocalSessionManager.class);
// 本地存储的用户会话 (userId -> sessions) // 本地存储的用户会话 (userId -> sessions)
public final ConcurrentHashMap<String, List<WebSocketSession>> userSessions = new ConcurrentHashMap<>(); @Getter
@Setter
private ConcurrentHashMap<String, List<WebSocketSession>> userSessions;
// 本地存储的群组会话 (groupId -> sessions) // 本地存储的群组会话 (groupId -> sessions)
private final ConcurrentHashMap<String, List<WebSocketSession>> groupSessions = new ConcurrentHashMap<>(); private ConcurrentHashMap<String, List<WebSocketSession>> groupSessions = new ConcurrentHashMap<>();
/** /**
* 添加用户会话 * 添加用户会话

View File

@ -1,6 +1,5 @@
package com.suisung.mall.im.common.websocket.service; package com.suisung.mall.im.common.websocket.service;
import com.suisung.mall.im.common.websocket.service.onchat.MallsuiteImSocketHandler;
import com.suisung.mall.im.common.websocket.utils.ServerIdGenerator; import com.suisung.mall.im.common.websocket.utils.ServerIdGenerator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

View File

@ -3,7 +3,6 @@ package com.suisung.mall.im.common.websocket.service.onchat;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.suisung.mall.common.feignService.AccountService;
import com.suisung.mall.im.common.websocket.service.DistributedMessageService; import com.suisung.mall.im.common.websocket.service.DistributedMessageService;
import com.suisung.mall.im.common.websocket.service.DistributedSessionService; import com.suisung.mall.im.common.websocket.service.DistributedSessionService;
import com.suisung.mall.im.common.websocket.service.LocalSessionManager; import com.suisung.mall.im.common.websocket.service.LocalSessionManager;
@ -14,15 +13,15 @@ import com.suisung.mall.im.pojo.vo.ReceiveDTO;
import com.suisung.mall.im.pojo.vo.SendVO; import com.suisung.mall.im.pojo.vo.SendVO;
import com.suisung.mall.im.pojo.vo.ToDTO; import com.suisung.mall.im.pojo.vo.ToDTO;
import com.suisung.mall.im.service.ChatHistoryService; import com.suisung.mall.im.service.ChatHistoryService;
import com.suisung.mall.im.service.LayGroupService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.socket.*; import org.springframework.web.socket.*;
import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class MallsuiteImSocketHandler implements WebSocketHandler { public class MallsuiteImSocketHandler implements WebSocketHandler {
@ -34,23 +33,18 @@ public class MallsuiteImSocketHandler implements WebSocketHandler {
// private static Map<String, List<WebSocketSession>> userSession; // private static Map<String, List<WebSocketSession>> userSession;
// private static Map<String, List<WebSocketSession>> groupSession; // private static Map<String, List<WebSocketSession>> groupSession;
@Resource @Autowired
private DistributedSessionService distributedSessionService; private DistributedSessionService distributedSessionService;
@Resource @Autowired
private DistributedMessageService distributedMessageService; private DistributedMessageService distributedMessageService;
@Resource @Autowired
private LocalSessionManager localSessionManager; private LocalSessionManager localSessionManager;
@Resource @Autowired
private ChatHistoryService chatHistoryService; private ChatHistoryService chatHistoryService;
@Resource
private LayGroupService layGroupService;
@Resource
private AccountService accountService;
//用户上线后触发 //用户上线后触发
@Override @Override
@ -61,9 +55,11 @@ public class MallsuiteImSocketHandler implements WebSocketHandler {
String sessionId = session.getId(); String sessionId = session.getId();
// 存储到本地会话管理 // 存储到本地会话管理
ConcurrentHashMap<String, List<WebSocketSession>> userSessions=new ConcurrentHashMap<>();
localSessionManager.setUserSessions(userSessions);
localSessionManager.addUserSession(loginUserId, session); localSessionManager.addUserSession(loginUserId, session);
logger.info("添加会话到本地成功:{}", localSessionManager.userSessions.values()); logger.info("添加会话到本地成功:{}", localSessionManager.getUserSessions().values());
// 注册到分布式会话服务 // 注册到分布式会话服务
Map<String, Object> attributes = new HashMap<>(); Map<String, Object> attributes = new HashMap<>();
@ -300,15 +296,15 @@ public class MallsuiteImSocketHandler implements WebSocketHandler {
*/ */
private void broadcastLocalOnlineStatus(SendVO message) { private void broadcastLocalOnlineStatus(SendVO message) {
logger.info("localSessionManager: {}", localSessionManager); logger.info("localSessionManager: {}", localSessionManager);
logger.info("localSessionManager.userSessions: {}", localSessionManager.userSessions); logger.info("localSessionManager.userSessions: {}", localSessionManager.getUserSessions());
logger.info("localSessionManager.userSessions.values: {}", localSessionManager.userSessions.values()); logger.info("localSessionManager.userSessions.values: {}", localSessionManager.getUserSessions().values());
if (localSessionManager == null || localSessionManager.userSessions.isEmpty()) { if (localSessionManager == null || localSessionManager.getUserSessions().isEmpty()) {
logger.error("localSessionManager is null, cannot broadcast online status"); logger.error("localSessionManager is null, cannot broadcast online status");
return; return;
} }
// 获取本地所有用户会话 // 获取本地所有用户会话
for (List<WebSocketSession> sessions : localSessionManager.userSessions.values()) { for (List<WebSocketSession> sessions : localSessionManager.getUserSessions().values()) {
for (WebSocketSession session : sessions) { for (WebSocketSession session : sessions) {
if (session!=null&&session.isOpen()) { if (session!=null&&session.isOpen()) {
try { try {