| | |
| | | package org.jeecg.modules.message.websocket; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | import java.util.concurrent.CopyOnWriteArraySet; |
| | | import javax.annotation.Resource; |
| | | import javax.websocket.*; |
| | | import javax.websocket.server.PathParam; |
| | |
| | | @ServerEndpoint("/websocket/{userId}") |
| | | public class WebSocket { |
| | | |
| | | private static CopyOnWriteArraySet<WebSocket> webSockets =new CopyOnWriteArraySet<>(); |
| | | /**线程安全Map*/ |
| | | private static ConcurrentHashMap<String, Session> sessionPool = new ConcurrentHashMap<>(); |
| | | |
| | |
| | | public static final String REDIS_TOPIC_NAME = "socketHandler"; |
| | | @Resource |
| | | private JeecgRedisClient jeecgRedisClient; |
| | | private Session session; |
| | | |
| | | |
| | | //==========【websocket接受、推送消息等方法 —— 具体服务节点推送ws消息】======================================================================================== |
| | |
| | | } |
| | | } |
| | | //=======【采用redis发布订阅模式——推送消息】========================================================================================== |
| | | |
| | | // 此为广播消息 |
| | | public void sendAllMessage(String message) { |
| | | // log.info("【websocket消息】广播消息:"+message); |
| | | for(WebSocket webSocket : webSockets) { |
| | | try { |
| | | if(webSocket.session.isOpen()) { |
| | | webSocket.session.getAsyncRemote().sendText(message); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | } |