You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.5 KiB
52 lines
1.5 KiB
package com.iflytop.gd.app.config;
|
|
|
|
import jakarta.websocket.*;
|
|
import jakarta.websocket.server.ServerEndpoint;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.Collections;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
|
|
@Slf4j
|
|
@ServerEndpoint("/ws")
|
|
@Component
|
|
public class WebSocketServer {
|
|
|
|
private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<>());
|
|
|
|
public static void sendMessageToClients(String message) {
|
|
synchronized (sessions) {
|
|
for (Session session : sessions) {
|
|
try {
|
|
session.getBasicRemote().sendText(message);
|
|
} catch (Exception e) {
|
|
log.error("发送给客户端失败 sessionId={}", session.getId(), e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@OnOpen
|
|
public void onOpen(Session session) {
|
|
sessions.add(session);
|
|
log.info("新连接加入,sessionId={}", session.getId());
|
|
}
|
|
|
|
@OnMessage
|
|
public void onMessage(String message, Session session) {
|
|
// log.info("收到消息 sessionId={},内容:{}", session.getId(), message);
|
|
}
|
|
|
|
@OnClose
|
|
public void onClose(Session session) {
|
|
sessions.remove(session);
|
|
log.info("连接已关闭,sessionId={}", session.getId());
|
|
}
|
|
|
|
@OnError
|
|
public void onError(Session session, Throwable error) {
|
|
log.error("发生错误,sessionId={}", session.getId(), error);
|
|
}
|
|
}
|