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<LicenseWebSocket> webSockets =new CopyOnWriteArraySet<>();
|
private static Map<String,Session> sessionPool = new ConcurrentHashMap<String,Session>();
|
|
@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<String> 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();
|
}
|
}
|
}
|
}
|
}
|