Spring Boot 中用 WebSocket 实现消息广播推送的核心是 STOMP 协议加消息代理,通过 @EnableWebSocketMessageBroker 启用代理、enableSimpleBroker("/topic") 设定广播路径、@MessageMapping 接收并 @SendTo 广播,前端用 STOMP.js 连接订阅。

在 Spring Boot 中用 WebSocket 实现消息广播推送,核心是借助 STOMP 协议 + 消息代理(message broker),而不是手动管理所有 Session。这种方式更稳定、可扩展,也符合 Spring 的设计哲学。
引入 WebSocket 依赖
确保 pom.xml 中包含:
-
spring-boot-starter-websocket—— 提供 STOMP 支持和消息代理配置能力 - (可选)
spring-boot-starter-thymeleaf或任意 Web 模板/静态资源支持,用于测试页面
配置 STOMP 消息代理
新建配置类,启用 STOMP 并指定广播路径:
- 用
@EnableWebSocketMessageBroker开启消息代理功能 -
enableSimpleBroker("/topic")表示客户端可订阅以/topic/xxx开头的广播地址 -
setApplicationDestinationPrefixes("/app")表示客户端发往服务端的消息需以/app/xxx开头 -
addEndpoint("/ws").withSockJS()注册连接端点,并兼容旧浏览器
编写广播消息控制器
使用 @MessageMapping 接收前端请求,再通过 @SendTo("/topic/xxx") 向所有订阅者广播:
立即学习“Java免费学习笔记(深入)”;
- 例如:用户发送
/app/broadcast,后端处理后向/topic/broadcast推送 - 前端只要提前订阅
/topic/broadcast,就能实时收到每一条广播 - 无需维护 Session 集合,广播由 Spring 内置 broker 自动完成
前端建立连接并订阅
用 STOMP.js 连接(比原生 WebSocket 更简洁):
- 通过
new SockJS('/ws')建立连接 - 用
stompClient.subscribe('/topic/broadcast', callback)订阅广播通道 - 用
stompClient.send('/app/broadcast', {}, JSON.stringify(msg))触发后端广播逻辑


















