溫馨提示×

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

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

Spring Boot與WebSocket通信實(shí)現(xiàn)

發(fā)布時(shí)間:2024-11-15 12:22:03 來(lái)源:億速云 閱讀:78 作者:小樊 欄目:編程語(yǔ)言

Spring Boot 是一個(gè)用于簡(jiǎn)化 Spring 應(yīng)用程序開(kāi)發(fā)的框架,它提供了許多開(kāi)箱即用的功能,使得開(kāi)發(fā)人員能夠快速構(gòu)建和部署應(yīng)用程序。WebSocket 是一種網(wǎng)絡(luò)通信協(xié)議,它允許在客戶端和服務(wù)器之間進(jìn)行全雙工通信。結(jié)合 Spring Boot 和 WebSocket,可以實(shí)現(xiàn)實(shí)時(shí)應(yīng)用程序的開(kāi)發(fā)。

下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用 Spring Boot 和 WebSocket 實(shí)現(xiàn)通信功能:

  1. 添加依賴

pom.xml 文件中添加 Spring Boot 和 WebSocket 的依賴:

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

創(chuàng)建一個(gè)配置類 WebSocketConfig,繼承 AbstractWebSocketMessageBrokerConfigurer,并配置 WebSocket 的相關(guān)信息:

@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").withSockJS();
    }
}

這里配置了一個(gè)名為 /websocket 的 WebSocket 端點(diǎn),并使用 SockJS 作為后備選項(xiàng)。同時(shí),啟用了簡(jiǎn)單的消息代理,用于將消息發(fā)布到 /topic 路徑。

  1. 創(chuàng)建 WebSocket 控制器

創(chuàng)建一個(gè)控制器 WebSocketController,用于處理客戶端發(fā)送的消息:

@Controller
public class WebSocketController {

    @MessageMapping("/send")
    @SendTo("/topic/messages")
    public String handleMessage(@Payload String message) {
        return "Received message: " + message;
    }
}

這里定義了一個(gè)名為 /send 的消息處理方法,使用 @MessageMapping 注解映射到 WebSocket 端點(diǎn)。當(dāng)客戶端發(fā)送消息到 /app/send 時(shí),該方法將被調(diào)用,并將消息發(fā)布到 /topic/messages。

  1. 創(chuàng)建客戶端

創(chuàng)建一個(gè)簡(jiǎn)單的 HTML 頁(yè)面,用于與 WebSocket 服務(wù)器進(jìn)行通信:

<!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>
    <script>
        var socket = new SockJS('/websocket');
        var stompClient = Stomp.over(socket);

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

        function sendMessage() {
            var message = document.getElementById('message').value;
            stompClient.send("/app/send", {}, message);
        }
    </script>
</head>
<body>
    <input type="text" id="message" placeholder="Type your message here">
    <button onclick="sendMessage()">Send</button>
</body>
</html>

這里使用 SockJS 和 Stomp.js 庫(kù)創(chuàng)建了一個(gè) WebSocket 客戶端,連接到 /websocket 端點(diǎn),并訂閱了 /topic/messages 主題。當(dāng)用戶點(diǎn)擊發(fā)送按鈕時(shí),客戶端將向服務(wù)器發(fā)送消息。

現(xiàn)在,你可以運(yùn)行 Spring Boot 應(yīng)用程序,并在瀏覽器中打開(kāi) HTML 頁(yè)面。當(dāng)用戶在輸入框中輸入消息并點(diǎn)擊發(fā)送按鈕時(shí),服務(wù)器將接收到消息并將其發(fā)布到 /topic/messages 主題,客戶端將接收到并顯示該消息。

向AI問(wèn)一下細(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