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;
import com.suisung.mall.im.pojo.vo.SendVO;
import lombok.Getter;
import lombok.Setter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@ -19,10 +21,14 @@ public class LocalSessionManager {
private static final Logger log = LoggerFactory.getLogger(LocalSessionManager.class);
// 本地存储的用户会话 (userId -> sessions)
public final ConcurrentHashMap<String, List<WebSocketSession>> userSessions = new ConcurrentHashMap<>();
@Getter
@Setter
private ConcurrentHashMap<String, List<WebSocketSession>> userSessions;
// 本地存储的群组会话 (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;
import com.suisung.mall.im.common.websocket.service.onchat.MallsuiteImSocketHandler;
import com.suisung.mall.im.common.websocket.utils.ServerIdGenerator;
import org.slf4j.Logger;
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.util.IdUtil;
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.DistributedSessionService;
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.ToDTO;
import com.suisung.mall.im.service.ChatHistoryService;
import com.suisung.mall.im.service.LayGroupService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.socket.*;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
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>> groupSession;
@Resource
@Autowired
private DistributedSessionService distributedSessionService;
@Resource
@Autowired
private DistributedMessageService distributedMessageService;
@Resource
@Autowired
private LocalSessionManager localSessionManager;
@Resource
@Autowired
private ChatHistoryService chatHistoryService;
@Resource
private LayGroupService layGroupService;
@Resource
private AccountService accountService;
//用户上线后触发
@Override
@ -61,9 +55,11 @@ public class MallsuiteImSocketHandler implements WebSocketHandler {
String sessionId = session.getId();
// 存储到本地会话管理
ConcurrentHashMap<String, List<WebSocketSession>> userSessions=new ConcurrentHashMap<>();
localSessionManager.setUserSessions(userSessions);
localSessionManager.addUserSession(loginUserId, session);
logger.info("添加会话到本地成功:{}", localSessionManager.userSessions.values());
logger.info("添加会话到本地成功:{}", localSessionManager.getUserSessions().values());
// 注册到分布式会话服务
Map<String, Object> attributes = new HashMap<>();
@ -300,15 +296,15 @@ public class MallsuiteImSocketHandler implements WebSocketHandler {
*/
private void broadcastLocalOnlineStatus(SendVO message) {
logger.info("localSessionManager: {}", localSessionManager);
logger.info("localSessionManager.userSessions: {}", localSessionManager.userSessions);
logger.info("localSessionManager.userSessions.values: {}", localSessionManager.userSessions.values());
if (localSessionManager == null || localSessionManager.userSessions.isEmpty()) {
logger.info("localSessionManager.userSessions: {}", localSessionManager.getUserSessions());
logger.info("localSessionManager.userSessions.values: {}", localSessionManager.getUserSessions().values());
if (localSessionManager == null || localSessionManager.getUserSessions().isEmpty()) {
logger.error("localSessionManager is null, cannot broadcast online status");
return;
}
// 获取本地所有用户会话
for (List<WebSocketSession> sessions : localSessionManager.userSessions.values()) {
for (List<WebSocketSession> sessions : localSessionManager.getUserSessions().values()) {
for (WebSocketSession session : sessions) {
if (session!=null&&session.isOpen()) {
try {