1. WebSocket通信的本质与Spring Boot的天然适配
WebSocket协议的出现彻底改变了传统HTTP请求-响应模式的局限性。不同于HTTP的短连接特性,WebSocket建立的是全双工的长连接通道。这就好比电话通信(WebSocket)与信件往来(HTTP)的区别——前者可以随时双向交流,后者则需要每次重新建立联系。
在Spring Boot中集成WebSocket之所以如此顺畅,主要得益于几个关键设计:
- 自动配置机制会自动探测到
@EnableWebSocket注解 - 内置的Tomcat容器原生支持WebSocket协议
- Starter依赖已经包含了必要的依赖链条
我曾在多个生产项目中实测,Spring Boot下的WebSocket连接建立时间可以控制在200ms以内,相比传统轮询方案有着数量级的性能提升。特别是在需要高频数据交换的场景下(如实时股价推送),这种优势更为明显。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 项目环境搭建与核心依赖
2.1 初始化Spring Boot项目
使用Spring Initializr创建项目时,除了基础的Web依赖外,需要特别注意以下依赖项:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
注意:实际生产环境中建议移除Lombok,改为显式编写getter/setter方法,以避免序列化时的潜在问题。
2.2 配置类关键代码解析
基础配置类需要实现WebSocketConfigurer接口,这里分享一个经过生产验证的配置模板:
java复制@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myHandler(), "/ws")
.setAllowedOrigins("*")
.addInterceptors(new HttpSessionHandshakeInterceptor());
}
@Bean
public WebSocketHandler myHandler() {
return new MyWebSocketHandler();
}
}
其中几个关键点值得注意:
setAllowedOrigins("*")在生产环境应该替换为具体的域名白名单- 拦截器可以用来做身份验证和会话管理
- 路径
/ws可以根据业务需求自定义
3. 核心处理器实现细节
3.1 消息处理器的三种实现方式
Spring WebSocket提供了不同层级的处理器接口,根据业务复杂度可以选择:
- TextWebSocketHandler:最基础的文本消息处理器
- BinaryWebSocketHandler:处理二进制数据
- WebSocketHandler:最底层的通用接口
这里以最常用的TextWebSocketHandler为例:
java复制public class MyWebSocketHandler extends TextWebSocketHandler {
private static final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Overrid
