Skip to content

优势

与直接使用原始 WebSocket 相比,使用 STOMP 作为子协议可以让 Spring Framework 和 Spring Security 提供比原始 WebSocket 更丰富的编程模型。这就像 HTTP 之于原始 TCP 一样。

以下是使用 STOMP 的主要优势:

  • 无需重造轮子: 不再需要发明自定义的消息协议和消息格式。
  • 成熟的客户端: 现成的 STOMP 客户端可以直接使用(包括 Spring 提供的 Java 客户端和流行的 JavaScript 库)。
  • 消息代理集成: 可以(可选地)使用外部消息代理(如 RabbitMQ、ActiveMQ 等)来管理订阅和广播消息。
  • 结构化的应用逻辑:
    • 原始方式: 一个连接对应一个 WebSocketHandler,所有类型的消息都在一个地方处理。
    • STOMP 方式: 逻辑可以组织在任意数量的 @Controller 实例中,消息根据目的地标头路由到对应的方法。
  • 安全保护: 可以利用 Spring Security 基于消息目的地和消息类型对消息进行精确的权限控制。

补充教学

1. 编程模型的跨跃

直接用 WebSocket 就像是在发“电报”,你得自己规定前三个字节是指令,后四个字节是长度。 用 STOMP 就像是在发“快递”,信封(Header)上已经写好了寄件人、收件人和指令类型,Spring 就像邮局,自动帮你分拣到对应的投递箱(Controller 方法)里。

2. 伸缩性 (Scalability)

如果你以后需要通过消息中间件跨服务器通信,STOMP 的原生支持能让你近乎零配置地从内存模拟切换到真实的 RabbitMQ 集群,这对于构建大规模实时系统至关重要。

Based on Spring Framework.