2016-04-02 74 views
0

我使用Grails/Groovy的,所以藉口奇怪的語法,我也是第一次使用的WebSockets所以請讓我知道,如果我要對這個錯誤的方式:發送到特定的連接只有春天的WebSockets

使用春天的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發送給那些特意在標題中提供的附加標識。

回答

1

而不是使用一個頭,你可以用DestinationVariable像這樣:

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

,並使用

@MessageMapping("/something.{additionalId}") 
protected String chatMessage(@DestinationVariable String additionalId, Principal principal, String data) { ... } 

此外,您可能希望限制誰訂閱特定/something.{additionalId}通過實施TopicSubscriptionInterceptor(),你可以驗證Principal

+0

感謝您的迴應,我還沒有機會測試這個,但我會評論/馬rk作爲答案當我做 – Alexjjsmith

+0

hii .. multipe變量怎麼樣? '/ hello/{file}/{mycode}'? – akiong