From c2fccb01b972176dc3da5a497b5e904025e9e98d Mon Sep 17 00:00:00 2001 From: bsw215583320 <baoshiwei121@163.com> Date: 星期二, 16 四月 2024 15:06:51 +0800 Subject: [PATCH] Merge branch 'master' of http://210.22.126.130:1111/r/dry/herb --- jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java | 146 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 146 insertions(+), 0 deletions(-) diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java new file mode 100644 index 0000000..8b908b6 --- /dev/null +++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java @@ -0,0 +1,146 @@ +package org.jeecg.modules.dry.websocket; + +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.constant.WebsocketConst; +import org.springframework.stereotype.Component; + +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Author scott + * @Date 2019/11/29 9:41 + * @Description: 姝ゆ敞瑙g浉褰撲簬璁剧疆璁块棶URL + */ +@Component +@Slf4j +@ServerEndpoint("/drySocket/{tenantId}") +public class DrySocket { + + /**绾跨▼瀹夊叏Map*/ + private static ConcurrentHashMap<String, Session> sessionPool = new ConcurrentHashMap<>(); + + + + + //==========銆恮ebsocket鎺ュ彈銆佹帹閫佹秷鎭瓑鏂规硶 鈥斺�� 鍏蜂綋鏈嶅姟鑺傜偣鎺ㄩ�亀s娑堟伅銆�======================================================================================== + @OnOpen + public void onOpen(Session session, @PathParam(value = "tenantId") String tenantId) { + try { + sessionPool.put(tenantId, session); + log.info("銆愮郴缁� WebSocket銆戞湁鏂扮殑杩炴帴锛屾�绘暟涓�:" + sessionPool.size()); + } catch (Exception e) { + } + } + + @OnClose + public void onClose(@PathParam("tenantId") String tenantId) { + try { + sessionPool.remove(tenantId); + log.info("銆愮郴缁� WebSocket銆戣繛鎺ユ柇寮�锛屾�绘暟涓�:" + sessionPool.size()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * ws鎺ㄩ�佹秷鎭� + * + * @param tenantId + * @param message + */ + public void pushMessage(String tenantId, String message) { + for (Map.Entry<String, Session> item : sessionPool.entrySet()) { + //userId key鍊�= {鐢ㄦ埛id + "_"+ 鐧诲綍token鐨刴d5涓瞹 + //TODO vue2鏈敼key鏂拌鍒欙紝鏆傛椂涓嶅奖鍝嶉�昏緫 + if (item.getKey().contains(tenantId)) { + Session session = item.getValue(); + try { + //update-begin-author:taoyan date:20211012 for: websocket鎶ラ敊 https://gitee.com/jeecg/jeecg-boot/issues/I4C0MU + synchronized (session){ + log.info("銆愮郴缁� WebSocket銆戞帹閫佸崟浜烘秷鎭�:" + message); + session.getBasicRemote().sendText(message); + } + //update-end-author:taoyan date:20211012 for: websocket鎶ラ敊 https://gitee.com/jeecg/jeecg-boot/issues/I4C0MU + } catch (Exception e) { + log.error(e.getMessage(),e); + } + } + } + } + + /** + * ws閬嶅巻缇ゅ彂娑堟伅 + */ + public void pushMessage(String message) { + try { + for (Map.Entry<String, Session> item : sessionPool.entrySet()) { + try { + item.getValue().getAsyncRemote().sendText(message); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + log.info("銆愮郴缁� WebSocket銆戠兢鍙戞秷鎭�:" + message); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + + + /** + * ws鎺ュ彈瀹㈡埛绔秷鎭� + */ + @OnMessage + public void onMessage(String message, @PathParam(value = "tenantId") String tenantId) { + if(!"ping".equals(message) && !WebsocketConst.CMD_CHECK.equals(message)){ + log.info("銆愮郴缁� WebSocket銆戞敹鍒板鎴风娑堟伅:" + message); + }else{ + log.debug("銆愮郴缁� WebSocket銆戞敹鍒板鎴风娑堟伅:" + message); + } + +// //------------------------------------------------------------------------------ +// JSONObject obj = new JSONObject(); +// //涓氬姟绫诲瀷 +// obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK); +// //娑堟伅鍐呭 +// obj.put(WebsocketConst.MSG_TXT, "蹇冭烦鍝嶅簲"); +// this.pushMessage(userId, obj.toJSONString()); +// //------------------------------------------------------------------------------ + } + + /** + * 閰嶇疆閿欒淇℃伅澶勭悊 + * + * @param session + * @param t + */ + @OnError + public void onError(Session session, Throwable t) { + log.warn("銆愮郴缁� WebSocket銆戞秷鎭嚭鐜伴敊璇�"); + t.printStackTrace(); + } + //==========銆愮郴缁� WebSocket鎺ュ彈銆佹帹閫佹秷鎭瓑鏂规硶 鈥斺�� 鍏蜂綋鏈嶅姟鑺傜偣鎺ㄩ�亀s娑堟伅銆�======================================================================================== + + + //==========銆愰噰鐢╮edis鍙戝竷璁㈤槄妯″紡鈥斺�旀帹閫佹秷鎭��======================================================================================== + + + + /** + * 姝や负鍗曠偣娑堟伅(澶氫汉) redis + * + * @param userIds + * @param message + */ +// public void sendMessage(String[] userIds, String message) { +// for (String userId : userIds) { +// sendMessage(userId, message); +// } +// } + //=======銆愰噰鐢╮edis鍙戝竷璁㈤槄妯″紡鈥斺�旀帹閫佹秷鎭��========================================================================================== + +} \ No newline at end of file -- Gitblit v1.9.3