文章目錄
- 通過Spring Boot集成WebSocket進行消息通信
- 1. 創建 Spring Boot 項目
- 2. 添加 WebSocket 依賴
- 3. 配置 WebSocket
- 4. 創建 WebSocket 處理器
- 5. 創建控制器(可選)
- 6. 前端頁面測試
- 7. 運行項目
- 注意事項
通過Spring Boot集成WebSocket進行消息通信
1. 創建 Spring Boot 項目
你可以通過 Spring Initializr(https://start.spring.io/ )創建一個新的 Spring Boot 項目,添加 Spring Web
和 Spring Boot DevTools
依賴,同時也可以添加 Lombok
依賴來簡化代碼。
2. 添加 WebSocket 依賴
在 pom.xml
中添加 Spring Boot WebSocket 相關依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
3. 配置 WebSocket
創建一個配置類來配置 WebSocket 端點和攔截器(可選):
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;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(myHandler(), "/ws").setAllowedOrigins("*");}@Beanpublic MyWebSocketHandler myHandler() {return new MyWebSocketHandler();}@Beanpublic ServletServerContainerFactoryBean createWebSocketContainer() {ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();container.setMaxTextMessageBufferSize(8192);container.setMaxBinaryMessageBufferSize(8192);return container;}
}
4. 創建 WebSocket 處理器
創建一個類來處理 WebSocket 連接、消息接收和關閉等事件:
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.io.IOException;public class MyWebSocketHandler extends TextWebSocketHandler {@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {String payload = message.getPayload();// 處理接收到的消息session.sendMessage(new TextMessage("Server received: " + payload));}@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {// 連接建立后的處理邏輯session.sendMessage(new TextMessage("Connection established"));}@Overridepublic void afterConnectionClosed(WebSocketSession session, int statusCode, String reason) throws Exception {// 連接關閉后的處理邏輯}
}
5. 創建控制器(可選)
如果你需要通過 HTTP 請求來觸發一些與 WebSocket 相關的操作,可以創建一個控制器:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class WebSocketController {@GetMapping("/test")public String test() {return "WebSocket test";}
}
6. 前端頁面測試
創建一個簡單的 HTML 頁面來測試 WebSocket 連接:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>WebSocket Test</title>
</head>
<body><input type="text" id="messageInput" placeholder="Enter message"><button onclick="sendMessage()">Send</button><div id="output"></div><script>var socket = new WebSocket('ws://localhost:8080/ws');socket.onopen = function(event) {document.getElementById('output').innerHTML += '<p>Connected</p>';};socket.onmessage = function(event) {document.getElementById('output').innerHTML += '<p>' + event.data + '</p>';};socket.onclose = function(event) {document.getElementById('output').innerHTML += '<p>Disconnected</p>';};function sendMessage() {var message = document.getElementById('messageInput').value;if (message) {socket.send(message);document.getElementById('messageInput').value = '';}}</script>
</body>
</html>
7. 運行項目
啟動 Spring Boot 項目,然后在瀏覽器中打開 HTML 頁面。你可以在輸入框中輸入消息并點擊發送按鈕,查看與服務器的 WebSocket 通信情況。
注意事項
- 確保你的服務器端口(默認為 8080)沒有被其他應用程序占用。
- 在生產環境中,需要考慮 WebSocket 的安全性,如使用 SSL/TLS 加密連接。
通過以上步驟,你就可以在 Spring Boot 項目中成功集成 WebSocket 并實現基本的消息通信功能。