¶Ô±ÈÐÂÎļþ |
| | |
| | | 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: æ¤æ³¨è§£ç¸å½äºè®¾ç½®è®¿é®URL |
| | | */ |
| | | @Component |
| | | @Slf4j |
| | | @ServerEndpoint("/drySocket/{tenantId}") |
| | | public class DrySocket { |
| | | |
| | | /**线ç¨å®å
¨Map*/ |
| | | private static ConcurrentHashMap<String, Session> sessionPool = new ConcurrentHashMap<>(); |
| | | |
| | | |
| | | |
| | | |
| | | //==========ãwebsocketæ¥åãæ¨éæ¶æ¯çæ¹æ³ ââ å
·ä½æå¡èç¹æ¨éwsæ¶æ¯ã======================================================================================== |
| | | @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çmd5串} |
| | | //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æ¥åãæ¨éæ¶æ¯çæ¹æ³ ââ å
·ä½æå¡èç¹æ¨éwsæ¶æ¯ã======================================================================================== |
| | | |
| | | |
| | | //==========ãéç¨redisåå¸è®¢é
模å¼ââæ¨éæ¶æ¯ã======================================================================================== |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ¤ä¸ºåç¹æ¶æ¯(å¤äºº) redis |
| | | * |
| | | * @param userIds |
| | | * @param message |
| | | */ |
| | | // public void sendMessage(String[] userIds, String message) { |
| | | // for (String userId : userIds) { |
| | | // sendMessage(userId, message); |
| | | // } |
| | | // } |
| | | //=======ãéç¨redisåå¸è®¢é
模å¼ââæ¨éæ¶æ¯ã========================================================================================== |
| | | |
| | | } |