2026-01-30 17:13:12 +08:00
|
|
|
package com.ruoyi.device.websocket;
|
|
|
|
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
import jakarta.websocket.*;
|
|
|
|
|
import jakarta.websocket.server.ServerEndpoint;
|
|
|
|
|
import java.util.concurrent.CopyOnWriteArraySet;
|
|
|
|
|
|
|
|
|
|
@Component
|
2026-01-30 17:19:25 +08:00
|
|
|
@ServerEndpoint("/websocket/statistics")
|
2026-01-30 17:13:12 +08:00
|
|
|
public class StatisticsWebSocket {
|
|
|
|
|
|
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(StatisticsWebSocket.class);
|
|
|
|
|
|
|
|
|
|
private Session session;
|
|
|
|
|
|
2026-01-30 17:19:25 +08:00
|
|
|
private static final CopyOnWriteArraySet<StatisticsWebSocket> sessions = new CopyOnWriteArraySet<>();
|
2026-01-30 17:13:12 +08:00
|
|
|
|
|
|
|
|
@OnOpen
|
2026-01-30 17:19:25 +08:00
|
|
|
public void onOpen(Session session) {
|
2026-01-30 17:13:12 +08:00
|
|
|
this.session = session;
|
2026-01-30 17:19:25 +08:00
|
|
|
sessions.add(this);
|
|
|
|
|
log.info("WebSocket连接建立: sessionId={}", session.getId());
|
2026-01-30 17:13:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@OnClose
|
2026-01-30 17:19:25 +08:00
|
|
|
public void onClose() {
|
|
|
|
|
sessions.remove(this);
|
2026-01-30 17:23:12 +08:00
|
|
|
if (session != null) {
|
|
|
|
|
log.info("WebSocket连接关闭: sessionId={}", session.getId());
|
|
|
|
|
} else {
|
|
|
|
|
log.info("WebSocket连接关闭: session为null");
|
|
|
|
|
}
|
2026-01-30 17:13:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@OnMessage
|
2026-01-30 17:19:25 +08:00
|
|
|
public void onMessage(String message) {
|
|
|
|
|
log.info("收到WebSocket消息: sessionId={}, message={}", session.getId(), message);
|
2026-01-30 17:13:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@OnError
|
2026-01-30 17:19:25 +08:00
|
|
|
public void onError(Session session, Throwable error) {
|
|
|
|
|
log.error("WebSocket错误: sessionId={}, error={}", session.getId(), error.getMessage(), error);
|
2026-01-30 17:13:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void sendMessage(String message) {
|
|
|
|
|
try {
|
|
|
|
|
if (session != null && session.isOpen()) {
|
|
|
|
|
session.getBasicRemote().sendText(message);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("发送WebSocket消息失败: error={}", e.getMessage(), e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-30 17:19:25 +08:00
|
|
|
public static void broadcast(String message) {
|
|
|
|
|
for (StatisticsWebSocket ws : sessions) {
|
|
|
|
|
ws.sendMessage(message);
|
2026-01-30 17:13:12 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|