基于 Spring Boot 的 WebSocket 实时通信服务实战
背景与目标
在传统的 HTTP 协议中,通信模式是'请求 - 响应',服务器无法主动推送数据。当我们需要实现多端消息通讯、即时通知或低延迟双向传输时,WebSocket 是更合适的选择。
本项目使用 Java JDK 8 和 Spring Boot 构建了一个演示项目,核心目标是解决客户端与服务器之间的实时、双向数据传输问题,并处理大消息分片、用户会话隔离等实际场景中的痛点。
功能特性
- 基础架构:基于 Maven 的 Spring Boot 项目骨架,依赖
spring-boot-starter-websocket。 - 连接管理:纯 WebSocket 端点
/ws,支持 http 自动切换为 ws,https 自动切换为 wss。 - 会话隔离:通过 URL 参数传递 UserId,实现不同用户间的独立会话管理。
- 大消息处理:支持分片设置和缓冲区大小调整,避免传输内容受限导致的错误。
- 测试工具:内置静态页面,用于模拟连接、发送消息及查看接收情况。
项目结构概览
pom.xml # 配置 Spring Boot 3.3 及 WebSocket 依赖
src/main/java/...
├── WebSocketApplication.java # 应用启动入口
├── WebSocketConfig.java # 注册处理器与容器配置
└── ChatWebSocketHandler.java # 核心业务逻辑:消息收发与路由
src/main/resources/static/
└── index.html # 前端测试页面
核心代码解析
1. 容器配置与缓冲区优化
默认情况下,Spring WebSocket 对消息大小有限制。如果业务涉及较大文本或二进制流,必须显式配置容器参数。我们在 WebSocketConfig 中设置了文本和二进制消息的最大缓冲区,以及会话空闲超时时间。
package com.example.websocket;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler;
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 {
{
registry.addHandler(chatHandler(), ).setAllowedOriginPatterns();
}
WebSocketHandler {
();
}
ServletServerContainerFactoryBean {
();
container.setMaxTextMessageBufferSize( * * );
container.setMaxBinaryMessageBufferSize( * * );
container.setMaxSessionIdleTimeout();
container;
}
}


