2016-04-02 3 views
0

Я использую Grails/заводной поэтому извините нечетный синтаксис, я тоже новичок в использовании WebSockets поэтому, пожалуйста, дайте мне знать, если я буду об этом в неправильном направлении:Отправить на определенные соединения только Spring WebSockets

Использование пружинное WebSockets я могу отправлять сообщения определенных пользователей подписки через

SimpMessagingTemplate brokerMessagingTemplate 
users.each { 
    brokerMessagingTemplate.convertAndSendToUser(it.id,"/topic/path",data) 
} 

Однако я хочу, чтобы отправлять сообщения только подписавшиеся пользователи передаются на сервер определенного значения/идентификатор и сверх их идентификатора пользователя. Соединение инициализировано на загрузке 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

Вместо того, чтобы использовать заголовок, который вы можете использовать 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

Спасибо за ответ, у меня еще не было возможности проверить это, но я буду комментировать/ma rk как ответ когда сделаю – Alexjjsmith

+0

hii .. как насчет multipe variable? '/ hello/{file}/{mycode}'? – akiong