背景与动机
随着互联网应用对实时性要求的提升,传统的 HTTP 请求 - 响应模式在处理股票行情、即时消息等场景时显得力不从心。频繁轮询浪费资源,服务器也无法主动通知客户端。WebSocket 协议的出现完美解决了这一难题,它允许服务器主动向客户端推送数据,实现真正的双向通信。
Spring Boot 作为主流的 Java 微服务框架,对 WebSocket 提供了良好的支持。本文将深入浅出地讲解如何在 Spring Boot 中集成 WebSocket,涵盖原生 WebSocket、STOMP 协议、安全集成及集群部署等实战内容,帮助读者全面掌握这一技术。
WebSocket 基础
什么是 WebSocket?
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,由 IETF 定为标准 RFC 6455。它使得客户端和服务器之间的数据交换更加简单,服务端可以主动推送数据。
与 HTTP 的关系
WebSocket 建立连接时使用 HTTP 协议的 Upgrade 机制进行升级。客户端发起带有特殊头部的 HTTP 请求,服务器返回 101 状态码后,连接便切换到 WebSocket 协议。两者都基于 TCP,但 HTTP 是半双工且需频繁建立连接,而 WebSocket 连接一旦建立即可持续通信,开销更小。
工作流程
- 握手阶段:客户端发起 HTTP 请求,携带
Upgrade: websocket头。 - 协议切换:服务器返回 101 状态码,同意切换。
- 数据传输:双方互相发送文本或二进制数据帧。
- 关闭连接:任意一方发送关闭帧,另一方响应后关闭 TCP。
Spring Boot 集成准备
Spring 框架从 4.0 开始引入 WebSocket 模块,Spring Boot 通过自动配置简化了过程。主要支持两种方式:
- 原生 WebSocket:基于 JSR-356,使用
@ServerEndpoint注解。 - STOMP over WebSocket:在 WebSocket 之上使用 STOMP 协议,提供类似消息队列的订阅发布模型。
创建一个基本 Spring Boot 项目,选择以下依赖:
<dependencies>
<!-- Spring Boot WebSocket Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web

