diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/config/websocket/WebSocketServer.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/config/websocket/WebSocketServer.java index 581c025..d761774 100644 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/config/websocket/WebSocketServer.java +++ b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/config/websocket/WebSocketServer.java @@ -26,7 +26,9 @@ import org.springframework.stereotype.Component; public class WebSocketServer { private static Logger logger = LoggerFactory.getLogger(WebSocketServer.class); - + + private final Map sessionSendLocks = new ConcurrentHashMap<>(); + /** * 静态变量,用来记录当前在线连接数,线程安全的类。 */ @@ -143,19 +145,18 @@ public class WebSocketServer { // logger.info("服务端给客户端发送消息 ==> toSid = {}, message = {}", toUid, message); // toSession.getAsyncRemote().sendText(message); // 异步发送 - try { - logger.info("服务端给客户端发送消息 ==> toSid = {}, message = {}", toUid, message); - - // 确保 WebSocket 状态正常 - if (toSession.isOpen()) { + // 每个 Session 一个锁 + Object lock = sessionSendLocks.computeIfAbsent( + toUid, k -> new Object() + ); + + synchronized (lock) { + try { + logger.info("服务端给客户端发送消息 ==> toSid = {}, message = {}", toUid, message); toSession.getAsyncRemote().sendText(message); - } else { - logger.warn("WebSocket 状态不正常,不能发送消息 ==> toSid = {}", toUid); + } catch (Exception e) { + logger.error("发送消息失败 ==> toSid = {}, message = {}", toUid, message, e); } - } catch (IllegalStateException e) { - logger.error("发送消息时出现错误 ==> toSid = {}, message = {}", toUid, message, e); - } catch (Exception e) { - logger.error("发送消息时出现未知错误 ==> toSid = {}, message = {}", toUid, message, e); } }