package com.lxzn.websocket; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; /** * @Description: * @Author: zhangherong * @Date: Created in 2021/6/22 10:21 * @Version: 1.0 * @Modified By: */ @Component @Slf4j @ServerEndpoint("/websocket/license") //此注解相当于设置访问URL public class LicenseWebSocket { private Session session; private static CopyOnWriteArraySet webSockets =new CopyOnWriteArraySet<>(); private static Map sessionPool = new ConcurrentHashMap(); @OnOpen public void onOpen(Session session) { try { this.session = session; webSockets.add(this); sessionPool.put(session.getId(), session); log.info("【LicenseWebSocket消息】有新的连接,总数为:"+webSockets.size()); } catch (Exception e) { } } @OnClose public void onClose() { try { webSockets.remove(this); sessionPool.remove(this.session.getId()); log.info("【LicenseWebSocket消息】连接断开,总数为:"+webSockets.size()); } catch (Exception e) { } } @OnMessage public void onMessage(String message) { log.debug("【LicenseWebSocket消息】收到客户端消息:"+message); } @OnError public void onError(Session session, Throwable error) { log.error("【LicenseWebSocket消息】发生错误:"+error); } // 此为群发消息 public void sendMessage(String message) { Set set = sessionPool.keySet(); log.info("【LicenseWebSocket消息】 群发消息:"+message); for(String id : set){ Session session = sessionPool.get(id); if (session != null && session.isOpen()) { try { session.getAsyncRemote().sendText(message); } catch (Exception e) { e.printStackTrace(); } } } } }