文章目录
通过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 {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myHandler(), "/ws").setAllowedOrigins("*");
}
@Bean
public MyWebSocketHandler myHandler() {
return new MyWebSocketHandler();
}
@Bean
public 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 {
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {
String payload = message.getPayload();
// 处理接收到的消息
session.sendMessage(new TextMessage("Server received: " + payload));
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
// 连接建立后的处理逻辑
session.sendMessage(new TextMessage("Connection established"));
}
@Override
public 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 并实现基本的消息通信功能。