一、为什么需要 WebSocket?
传统的 Web 应用基于 HTTP 协议,是请求 - 响应模式:
- 客户端发请求 → 服务端处理 → 返回结果 → 连接关闭
- 如果服务端有新数据(如聊天消息、订单状态变更),无法主动推给客户端
为实现'实时通信',早期常用 轮询(Polling) 或 长轮询(Long Polling):
- 轮询:每隔几秒发一次请求 → 浪费带宽、延迟高
- 长轮询:请求挂起直到有数据 → 仍基于 HTTP,连接频繁建立/断开
✅ WebSocket 的优势:
- 全双工通信:客户端和服务端可随时互相发送数据
- 单 TCP 连接:握手后复用连接,低开销
- 低延迟、高效率:适合实时场景(聊天、股票、游戏、监控)
二、WebSocket 协议简析
- 连接建立:后续通信使用 WebSocket 帧(Frame),不再是 HTTP
服务端响应:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
握手阶段:客户端通过 HTTP 发起 Upgrade 请求
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
🔑 关键:一次握手,长期通信
三、Spring Boot 整合 WebSocket(基础版)
场景:简易在线聊天室
1. 添加依赖(pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2. 启用 WebSocket 支持
@Configuration
@EnableWebSocketMessageBroker
{
{
registry.addEndpoint()
.setAllowedOriginPatterns()
.withSockJS();
}
{
registry.enableSimpleBroker(, );
registry.setApplicationDestinationPrefixes();
}
}

