package rf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
private YourWebSocketHandler yourWebSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(yourWebSocketHandler, "/yourWebSocketEndpoint")
.setAllowedOrigins("*"); // 允许来自任何源的连接,生产环境中应限制来源
}
}
package rf;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;
@Component
public class YourWebSocketHandler extends TextWebSocketHandler {
private static final Logger logger = Logger.getLogger(YourWebSocketHandler.class.getName());
// 存储所有已连接的 WebSocketSession
private List<WebSocketSession> sessions = new ArrayList<>();
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
// 这里可以处理前端发送的消息
logger.info("Received message from frontend: " + message.getPayload());
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
logger.info("WebSocket connection established.");
// 将新连接的会话添加到列表中
sessions.add(session);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
logger.info("WebSocket connection closed. Status: " + status);
// 从列表中移除已关闭的会话
sessions.remove(session);
}
// 发送消息给所有已连接的前端页面
public void sendTimeRangeToAllFrontends(Date passTimeStart, Date passEndTime) {
if (passTimeStart!= null && passEndTime!= null) {
System.out.println("准备发送");
String message = "recognitionTime>= " + passTimeStart + " AND recognitionTime<= " + passEndTime;
for (WebSocketSession session : sessions) {
try {
if (session.isOpen()) {
session.sendMessage(new TextMessage(message));
logger.info("Sent time range to frontend: " + message);
}
} catch (IOException e) {
logger.severe("Error sending message to frontend: " + e.getMessage());
}
}
}
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
const socket = new WebSocket('ws://1.1.1.1:8888/yourWebSocketEndpoint');
socket.onopen = function () {
console.log('WebSocket connection opened.');
};
socket.onmessage = function (event) {
console.log('Received message from backend: ' + event.data);
alert(event.data);
// 在这里可以处理后端发送过来的消息
};
socket.onclose = function () {
console.log('WebSocket connection closed.');
};
socket.onerror = function (error) {
console.error('WebSocket error: ' + error);
};
</script>
</body>
</html>