From 457e59e61c9d7dbf4ef299c34aadd2c00fc0f1c9 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期四, 22 八月 2024 17:53:55 +0800 Subject: [PATCH] fix 修复 多线程对同一个session发送ws消息报错问题 --- ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java | 39 ++++++++++++++++++++++++++++----------- 1 files changed, 28 insertions(+), 11 deletions(-) diff --git a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java index 99c16c6..8c4170a 100644 --- a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java +++ b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java @@ -29,10 +29,10 @@ public class WebSocketUtils { /** - * 鍙戦�佹秷鎭� + * 鍚戞寚瀹氱殑WebSocket浼氳瘽鍙戦�佹秷鎭� * - * @param sessionKey session涓婚敭 涓�鑸负鐢ㄦ埛id - * @param message 娑堟伅鏂囨湰 + * @param sessionKey 瑕佸彂閫佹秷鎭殑鐢ㄦ埛id + * @param message 瑕佸彂閫佺殑娑堟伅鍐呭 */ public static void sendMessage(Long sessionKey, String message) { WebSocketSession session = WebSocketSessionHolder.getSessions(sessionKey); @@ -40,18 +40,18 @@ } /** - * 璁㈤槄娑堟伅 + * 璁㈤槄WebSocket娑堟伅涓婚锛屽苟鎻愪緵涓�涓秷璐硅�呭嚱鏁版潵澶勭悊鎺ユ敹鍒扮殑娑堟伅 * - * @param consumer 鑷畾涔夊鐞� + * @param consumer 澶勭悊WebSocket娑堟伅鐨勬秷璐硅�呭嚱鏁� */ public static void subscribeMessage(Consumer<WebSocketMessageDto> consumer) { RedisUtils.subscribe(WEB_SOCKET_TOPIC, WebSocketMessageDto.class, consumer); } /** - * 鍙戝竷璁㈤槄鐨勬秷鎭� + * 鍙戝竷WebSocket璁㈤槄娑堟伅 * - * @param webSocketMessage 娑堟伅瀵硅薄 + * @param webSocketMessage 瑕佸彂甯冪殑WebSocket娑堟伅瀵硅薄 */ public static void publishMessage(WebSocketMessageDto webSocketMessage) { List<Long> unsentSessionKeys = new ArrayList<>(); @@ -76,9 +76,9 @@ } /** - * 鍙戝竷璁㈤槄鐨勬秷鎭�(缇ゅ彂) + * 鍚戞墍鏈夌殑WebSocket浼氳瘽鍙戝竷璁㈤槄鐨勬秷鎭�(缇ゅ彂) * - * @param message 娑堟伅鍐呭 + * @param message 瑕佸彂甯冪殑娑堟伅鍐呭 */ public static void publishAll(String message) { WebSocketMessageDto broadcastMessage = new WebSocketMessageDto(); @@ -88,17 +88,34 @@ }); } + /** + * 鍚戞寚瀹氱殑WebSocket浼氳瘽鍙戦�丳ong娑堟伅 + * + * @param session 瑕佸彂閫丳ong娑堟伅鐨刉ebSocket浼氳瘽 + */ public static void sendPongMessage(WebSocketSession session) { sendMessage(session, new PongMessage()); } + /** + * 鍚戞寚瀹氱殑WebSocket浼氳瘽鍙戦�佹枃鏈秷鎭� + * + * @param session WebSocket浼氳瘽 + * @param message 瑕佸彂閫佺殑鏂囨湰娑堟伅鍐呭 + */ public static void sendMessage(WebSocketSession session, String message) { sendMessage(session, new TextMessage(message)); } - private static void sendMessage(WebSocketSession session, WebSocketMessage<?> message) { + /** + * 鍚戞寚瀹氱殑WebSocket浼氳瘽鍙戦�乄ebSocket娑堟伅瀵硅薄 + * + * @param session WebSocket浼氳瘽 + * @param message 瑕佸彂閫佺殑WebSocket娑堟伅瀵硅薄 + */ + private synchronized static void sendMessage(WebSocketSession session, WebSocketMessage<?> message) { if (session == null || !session.isOpen()) { - log.error("[send] session浼氳瘽宸茬粡鍏抽棴"); + log.warn("[send] session浼氳瘽宸茬粡鍏抽棴"); } else { try { session.sendMessage(message); -- Gitblit v1.9.3