你可以通过 Spring Initializr(https://start.spring.io/ )创建一个新的 Spring Boot 项目,添加 Spring Web
和 Spring Boot DevTools
依赖,同时也可以添加 Lombok
依赖来简化代码。
在 pom.xml
中添加 Spring Boot WebSocket 相关依赖:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-websocketartifactId>
dependency>
创建一个配置类来配置 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;
}
}
创建一个类来处理 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 {
// 连接关闭后的处理逻辑
}
}
如果你需要通过 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";
}
}
创建一个简单的 HTML 页面来测试 WebSocket 连接:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>WebSocket Testtitle>
head>
<body>
<input type="text" id="messageInput" placeholder="Enter message">
<button onclick="sendMessage()">Sendbutton>
<div id="output">div>
<script>
var socket = new WebSocket('ws://localhost:8080/ws');
socket.onopen = function(event) {
document.getElementById('output').innerHTML += 'Connected
';
};
socket.onmessage = function(event) {
document.getElementById('output').innerHTML += ''
+ event.data + '';
};
socket.onclose = function(event) {
document.getElementById('output').innerHTML += 'Disconnected
';
};
function sendMessage() {
var message = document.getElementById('messageInput').value;
if (message) {
socket.send(message);
document.getElementById('messageInput').value = '';
}
}
script>
body>
html>
启动 Spring Boot 项目,然后在浏览器中打开 HTML 页面。你可以在输入框中输入消息并点击发送按钮,查看与服务器的 WebSocket 通信情况。
通过以上步骤,你就可以在 Spring Boot 项目中成功集成 WebSocket 并实现基本的消息通信功能。