WebSocket

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值