溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring Boot與WebSocket實(shí)時(shí)通信

發(fā)布時(shí)間:2024-10-05 08:37:02 來(lái)源:億速云 閱讀:81 作者:小樊 欄目:編程語(yǔ)言

Spring Boot與WebSocket實(shí)時(shí)通信是一種利用WebSocket技術(shù)實(shí)現(xiàn)服務(wù)器與客戶端之間實(shí)時(shí)數(shù)據(jù)傳輸?shù)姆椒?。WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,它使得服務(wù)器能夠主動(dòng)向客戶端推送數(shù)據(jù),從而實(shí)現(xiàn)實(shí)時(shí)通信。

要在Spring Boot中實(shí)現(xiàn)WebSocket實(shí)時(shí)通信,你需要遵循以下步驟:

  1. 添加依賴

在你的Spring Boot項(xiàng)目中,需要添加spring-boot-starter-websocket依賴。在pom.xml文件中添加以下內(nèi)容:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. 配置WebSocket

創(chuàng)建一個(gè)配置類,繼承AbstractWebSocketMessageBrokerConfigurer,并覆蓋configureMessageBrokerregisterStompEndpoints方法。例如:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/websocket-demo").withSockJS();
    }
}

這里,我們啟用了簡(jiǎn)單的消息代理,將/topic作為廣播消息的前綴,將/app作為客戶端訂閱的前綴。同時(shí),我們添加了一個(gè)使用SockJS的WebSocket端點(diǎn)/websocket-demo。

  1. 創(chuàng)建消息處理器

創(chuàng)建一個(gè)類,實(shí)現(xiàn)WebSocketHandler接口,用于處理WebSocket消息。例如:

public class MyWebSocketHandler implements WebSocketHandler {

    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        // 處理接收到的消息
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // 連接建立后的操作
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        // 連接關(guān)閉后的操作
    }
}
  1. 發(fā)送消息

在控制器或其他需要發(fā)送消息的地方,使用SimpMessagingTemplate發(fā)送消息。例如:

@Autowired
private SimpMessagingTemplate messagingTemplate;

public void sendMessage(String destination, String message) {
    messagingTemplate.convertAndSend(destination, message);
}
  1. 客戶端代碼

在客戶端,你可以使用原生的WebSocket API或者第三方庫(kù)(如SockJS)來(lái)連接服務(wù)器并接收消息。例如,使用SockJS的JavaScript客戶端代碼如下:

<!DOCTYPE html>
<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.5.0/sockjs.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
</head>
<body>
    <script>
        var socket = new SockJS('/websocket-demo');
        var stompClient = Stomp.over(socket);

        stompClient.connect({}, function (frame) {
            console.log('Connected: ' + frame);
            stompClient.subscribe('/topic/messages', function (response) {
                console.log('Received message: ' + response.body);
            });
        });
    </script>
</body>
</html>

這樣,當(dāng)服務(wù)器通過(guò)sendMessage方法發(fā)送消息到/topic/messages時(shí),客戶端就能實(shí)時(shí)接收到這些消息。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI