随着互联网技术的发展,实时通信已经成为Web应用不可或缺的一部分。WebSocket 提供了一种在单个 TCP 连接上进行全双工通信的机制,使得前后端可以实时交互数据。Spring Boot 作为一款流行的Java后端框架,提供了便捷的方式来集成 WebSocket。本文将详细介绍如何在 Spring Boot 应用中集成 WebSocket,实现前后端消息的实时互传。
WebSocket 是一种网络通信协议,它允许服务器和客户端之间进行全双工通信。与传统的 HTTP 协议相比,WebSocket 允许服务器主动推送数据到客户端,而不需要客户端轮询服务器。

WebSocket 协议采用类似于 HTTP 的握手过程来建立连接,一旦连接建立,数据传输将更加高效。
在 Spring Boot 项目中,首先需要在 pom.xml 文件中添加 WebSocket 相关依赖:
org.springframework.boot
spring-boot-starter-websocket
在 Spring Boot 的配置类中,需要配置 WebSocket 的端点、消息处理类等信息:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}
}
创建一个 WebSocket 控制器,用于处理客户端发送的消息和服务器推送的消息:
@Controller
public class WebSocketController {
@MessageMapping("/send")
@SendTo("/topic/message")
public String sendMessage(String message) {
return message;
}
@MessageMapping("/broadcast")
@SendTo("/topic/message")
public String broadcastMessage(String message) {
return message;
}
}
在前端,使用 SockJS 库来连接 WebSocket。SockJS 是一个抽象层,它可以适配不同的 WebSocket 客户端实现。
使用 SockJS 和 StompJS 连接到 WebSocket 服务器:
var socket = new SockJS('/ws');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/message', function (message) {
console.log('Message received: ' + message.body);
});
});
使用 StompJS 发送消息到服务器:
function sendMessage() {
stompClient.send("/app/send", {}, "Hello, WebSocket!");
}
通过以上步骤,我们成功地将 Spring Boot 与 WebSocket 集成,并实现了前后端消息的实时互传。WebSocket 提供了一种高效、实时的通信方式,为开发者带来了极大的便利。在实际应用中,可以根据需求扩展 WebSocket 的功能,如实现多房间通信、用户认证等。