a-tuoheng-device/src/main/java/com/ruoyi/device/websocket/StatisticsWebSocket.java

60 lines
1.7 KiB
Java
Raw Normal View History

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);
log.info("WebSocket连接关闭: sessionId={}", session.getId());
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
}
}
}