CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
WebSocket 实时通信/课时/STOMP 消息
RawBlame
课时目录12 节

WebSocket 实时通信

  1. 01WebSocket 是什么
  2. 02协议与握手
  3. 03Spring WebSocket
  4. 04STOMP 消息
  5. 05浏览器客户端
  6. 06Next.js 与 WebSocket
  7. 07鉴权与安全
  8. 08水平扩展
  9. 09SSE 对照
  10. 10Nginx 反代升级
  11. 11测试与调试
  12. 12综合练习

STOMP 消息

目的地、订阅、MessageMapping。

35 分钟

STOMP 消息

STOMP(Simple Text Oriented Messaging Protocol)在 WebSocket 之上提供 目的地、订阅、广播 语义。CodeRoadMap 实验台聊天室推荐 STOMP,而非手写 JSON 路由。

学习目标

  • 配置 enableSimpleBroker 与 @MessageMapping
  • 理解 /topic vs /queue vs /app 前缀
  • 用 @SendTo 向订阅者广播

Broker 配置

@Configuration
@EnableWebSocketMessageBroker
public class StompConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws")
                .setAllowedOriginPatterns("*")
                .withSockJS(); // 降级兼容,生产可关
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic", "/queue");
        registry.setApplicationDestinationPrefixes("/app");
    }
}
  • 客户端 订阅 /topic/lab.{sessionId}
  • 客户端 发送 到 /app/chat.send

控制器

@Controller
public class LabChatController {

    @MessageMapping("/chat.send")
    @SendTo("/topic/lab.{sessionId}")
    public ChatMessage send(@Payload ChatMessage msg,
                            @Header("sessionId") String sessionId) {
        return msg; // 广播给该实验间所有订阅者
    }
}

REST 仍负责创建 sessionId(POST /api/lab/sessions);STOMP 只推送 进行中 的消息。

客户端订阅(概念)

stompClient.subscribe(`/topic/lab.${sessionId}`, (frame) => {
  const msg = JSON.parse(frame.body);
});
stompClient.publish({ destination: "/app/chat.send", body: JSON.stringify(msg) });

完整浏览器代码见 ws-client。

练习

  • 画出发送一条聊天消息经过 /app → Controller → /topic 的路径
  • 解释 /queue 适合点对点通知的场景
  • 对照 理解跨实例广播
redis-pubsub

小结

STOMP = WebSocket 上的消息总线。 下一课浏览器客户端与重连。

加载本节练习…
← 上一课Spring WebSocket下一课 →浏览器客户端