代码
创建WebSocket端点
@ServerEndpoint(value = "/websocket/{uuid}")
@Component
public class MessageHandleController{
private static final Logger logger = LoggerFactory.getLogger(MessageHandleController.class);
public static CopyOnWriteArraySet<MessageHandleController> webSocketSet = new CopyOnWriteArraySet<>();
private static ConcurrentHashMap<String, MessageHandleController> webSocketMap = new ConcurrentHashMap<>();
private Session session;
private String uuid;
@OnOpen
public void onOpen(@PathParam("uuid") String uuid, Session session) {
logger.info("uuid: {}, sessionId: {}", uuid, session.getId());
try {
if (webSocketMap.containsKey(uuid)) {
webSocketMap.get(uuid).session.close();
webSocketSet.remove(webSocketMap.get(uuid));
}
this.session = session;
this.uuid = uuid;
webSocketSet.add(this);
webSocketMap.put(uuid, this);
} catch (Exception e) {
logger.error("error:" + e.getMessage());
}
}
@OnClose
public void onClose(@PathParam("uuid") String uuid, Session session) {
webSocketSet.remove(this);
webSocketMap.remove(uuid);
}
@OnMessage
public void onMessage(String message, Session session) {
logger.info("Message from client: " + message);
}
@OnError
public void onError(Session session, Throwable error) {
logger.error("error:" + error.getMessage());
try {
session.close();
webSocketSet.remove(this);
webSocketMap.remove(this.uuid);
} catch (IOException e) {
logger.error("error:" + e.getMessage());
}
}
public void sendMessage(Session session, String msg) {
logger.info("发送消息");
try {
if (session.isOpen()) {
session.getAsyncRemote().sendText(msg);
} else {
session.close();
webSocketSet.remove(this);
webSocketMap.remove(this.uuid);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static CopyOnWriteArraySet<MessageHandleController> getWebSocketSet() {
return webSocketSet;
}
public static void setWebSocketSet(CopyOnWriteArraySet<MessageHandleController> webSocketSet) {
MessageHandleController.webSocketSet = webSocketSet;
}
public static ConcurrentHashMap<String, MessageHandleController> getWebSocketMap() {
return webSocketMap;
}
public static void setWebSocketMap(ConcurrentHashMap<String, MessageHandleController> webSocketMap) {
MessageHandleController.webSocketMap = webSocketMap;
}
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
}
创建定时任务
@Scheduled(cron = "0 * * * * ?")
public void sendMsg() {
logger.info("定时任务,start");
CopyOnWriteArraySet<MessageHandleController> webSocketSet;
try {
webSocketSet = MessageHandleController.getWebSocketSet();
webSocketSet.forEach(obj -> {
logger.info("uuid:" + obj.getUuid());
logger.info("session:" + obj.getSession().getId());
obj.sendMessage(obj.getSession(), "time:" + LocalDateTime.now());
});
} catch (Exception e) {
logger.error("error:" + e.getMessage());
}
logger.info("定时任务,end");
}