STOMP协议规范中文版

STOMP 协议规范 - 1.2 版

相关参考

【websocket】spring boot 集成 websocket 的四种方式

WebSocket 的故事(二)-- Spring 中如何利用 STOMP 快速构建 WebSocket 广播式消息模式

个人理解

与spring-messaging整合之后, 网上有些容易混淆的点, 在亲自验证之后, 记录一下个人理解.

  1. registry.enableSimpleBroker("xxx") 方法的参数是设置广播节点, 只有节点暴露之后才有效. 给用户单独发消息的 /user 前缀可以不用添加

  2. 订阅/user 开头的的写法网上有两种: stompClient.subscribe('/user/chat', function (data) {xxx})

    stompClient.subscribe('/user/' + uid + '/chat', function (data) {xxx})

    第一种订阅方法订阅之后, 会使用 DefaultUserDestinationResolver.getTargetDestination()方法来

    得到一个与session绑定的唯一地址, 然后注册到DefaultSubscriptionRegistry里面, 实际上的订阅地

    址是: /chat-userxxx

    在发送一对一消息时, 调用sendToUser()方法会先拼接成 /user/uid/chat 这个dest, 然后根据这个地

    址查询到真正的topic: /chat-userxxx 来发送消息

    第二种订阅方法, 也可以实现效果, 但是根据断点调试结果来看是直接往 '/user/' + uid + '/chat'

    个topic上发消息的, 也就是说如果别人也订阅了这个topic, 则也会收到消息(个人猜测)

    总结一下, 第一种方法是往 /chat-userxxx 这个topic发消息的, 第二种是往 /user/xxx/chat 这个

    topic发消息的

DEMO