STOMP协议规范中文版
相关参考
个人理解
与spring-messaging整合之后, 网上有些容易混淆的点, 在亲自验证之后, 记录一下个人理解.
- 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发消息的