在Spring Boot中實現WebSocket實時通訊

省赚客开发者团队發表於2024-07-20

在Spring Boot中實現WebSocket實時通訊

大家好,我是微賺淘客系統3.0的小編,是個冬天不穿秋褲,天冷也要風度的程式猿!

在現代 web 應用中,實時通訊功能越來越受到重視。WebSocket 協議是一種在單個 TCP 連線上進行全雙工通訊的協議,允許客戶端和伺服器之間進行實時資料傳輸。Spring Boot 提供了對 WebSocket 的良好支援,使得實現實時通訊變得非常簡單。本文將介紹如何在 Spring Boot 中實現 WebSocket 實時通訊,包括伺服器端和客戶端的實現。

1. 建立 Spring Boot 專案

首先,確保你已經建立了一個 Spring Boot 專案。你可以使用 Spring Initializr 生成一個包含 Web 依賴項的專案。

2. 新增依賴

pom.xml 檔案中,新增 spring-boot-starter-websocket 依賴來支援 WebSocket:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

3. 配置 WebSocket

在 Spring Boot 中,你需要建立一個 WebSocket 配置類來註冊 WebSocket 端點。下面是一個示例:

package cn.juwatech.websocket.config;

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 {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/websocket").setAllowedOrigins("*");
    }
}

在這個配置類中,MyWebSocketHandler 是我們將要實現的 WebSocket 處理器類,/websocket 是 WebSocket 端點的路徑。

4. 實現 WebSocket 處理器

接下來,建立一個 WebSocket 處理器類,該類實現 WebSocketHandler 介面:

package cn.juwatech.websocket.handler;

import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketMessage;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("Received message: " + message.getPayload());
        session.sendMessage(new TextMessage("Message received: " + message.getPayload()));
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("WebSocket connection established");
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        System.out.println("WebSocket connection closed");
    }
}

在這個處理器中,我們處理接收到的文字訊息,並向客戶端傳送確認訊息。

5. 建立 WebSocket 客戶端

在前端,我們可以使用 JavaScript 建立一個 WebSocket 客戶端來連線到伺服器併傳送訊息:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Client</title>
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function() {
            var ws = new WebSocket("ws://localhost:8080/websocket");

            ws.onopen = function() {
                console.log("WebSocket connection opened");
                ws.send("Hello, WebSocket!");
            };

            ws.onmessage = function(event) {
                console.log("Received message: " + event.data);
            };

            ws.onclose = function() {
                console.log("WebSocket connection closed");
            };
        });
    </script>
</head>
<body>
    <h1>WebSocket Client</h1>
</body>
</html>

這個簡單的 HTML 頁面建立了一個 WebSocket 連線,並在開啟連線後傳送一條訊息。它還處理來自伺服器的訊息並在控制檯中輸出。

6. 測試

啟動 Spring Boot 應用程式,並在瀏覽器中開啟 HTML 頁面。你應該能夠看到 WebSocket 連線的建立、訊息的傳送和接收。控制檯中也會輸出相應的日誌資訊。

7. 高階功能

  • 廣播訊息:可以透過維護 WebSocket 會話列表,在處理器中向所有會話傳送廣播訊息。
  • 使用者身份驗證:可以使用 Spring Security 配合 WebSocket 進行使用者身份驗證。
  • Ping/Pong:可以實現心跳檢測來確保連線的健康狀態。

8. 結論

透過以上步驟,你可以在 Spring Boot 應用中輕鬆實現 WebSocket 實時通訊。無論是構建聊天應用、實時通知系統,還是其他需要實時資料傳輸的應用,WebSocket 都是一個強大的工具。Spring Boot 的 WebSocket 支援讓這一過程變得簡單而高效。

本文著作權歸聚娃科技微賺淘客系統開發者團隊,轉載請註明出處!

相關文章