仅发送到某些连接Spring Websockets

时间:2016-04-02 13:59:56

标签: spring-mvc grails websocket stomp spring-websocket

我正在使用grails / groovy,请原谅奇怪的语法,我也是使用websockets的新手,所以如果我以错误的方式解决这个问题,请告诉我:

使用spring websockets,我可以通过

向某些订阅用户发送消息
SimpMessagingTemplate brokerMessagingTemplate
users.each {
    brokerMessagingTemplate.convertAndSendToUser(it.id,"/topic/path",data)
}

但是,我想仅向已订阅的用户发送消息已将超过其用户ID的特定值/ id传递给服务器。在wepage加载时初始化连接,所以我想也许我可以添加一个STOMP头值将该信息传递给服务器,服务器只向与之匹配的连接发送消息。

var socket = new SockJS("/url/stomp");
var client = Stomp.over(socket);
var headers = {'additionalId': additionalId};
client.connect({}, function() {
    client.subscribe("/user/topic/path", function (data) {
}, headers);

首先,我不知道添加标头值是否是正确的方法,其次我不知道如何将SimpMessagingTemplate发送给那些在标题中专门提供额外Id的人。

1 个答案:

答案 0 :(得分:1)

您可以使用<#include "/pages/standardPage.ftl" /> <@standardPage title="Home"> <h1>Home Page</h1> <p>This bit replaces the nested tag in the layout</p> </@standardPage> 代替使用标题:

DestinationVariable

并使用

brokerMessagingTemplate.convertAndSend("/topic/something.${additionalId}".toString(), data)

此外,您可能希望通过实施 @MessageMapping("/something.{additionalId}") protected String chatMessage(@DestinationVariable String additionalId, Principal principal, String data) { ... } 来限制订阅特定/something.{additionalId}的用户,您可以在其中验证TopicSubscriptionInterceptor()