Spring websocket с stomp: личное сообщение нескольким экземплярам одного и того же пользователя

Я использую Springwebsockets с протоколом STOMP через Websockets, и я использую боркер в памяти. Я хочу отправлять сообщения определенным пользователям. На стороне клиента я подписываюсь на закрытую тему:

stompClient.subscribe('/user/topic/private', function(greeting){ 
});

И я отправляю сообщение следующим образом:

stompClient.send("/user/"+ user +"/topic/private", {}, message);

Все это работает нормально, и мне не нужно ничего делать на сервере. Но когда я дважды вхожу в систему с одним и тем же пользователем (например, в разных браузерах, на одном рабочем столе и на одном мобильном телефоне), это не работает так, как я ожидал. Я ожидаю, что личное сообщение окажется в обоих браузерах. Однако, похоже, это только в текущем браузере. Есть ли лучший способ сделать такой личный обмен сообщениями? Или я неправильно понял, как работает приватный канал?


person Geert Olaerts    schedule 04.03.2016    source источник
comment
Ваш user аутентифицирован?   -  person Karthik    schedule 07.03.2016
comment
да мои пользователи аутентифицированы   -  person Geert Olaerts    schedule 09.03.2016


Ответы (1)


Вы можете попробовать это:

@SendToUser(value = "your destination",broadcast = true)
public String handleException(Message message) {
    //your logic goes here
    return message; // this will be sent to user
}
person Karthik    schedule 09.03.2016
comment
Верно, но я предполагаю, что тогда я буду использовать пункт назначения приложения, а не пункт назначения приложения? - person Geert Olaerts; 10.03.2016
comment
что это значит? - person Karthik; 10.03.2016
comment
Насколько я понимаю, пользовательское назначение работает автоматически. Поэтому, если я отправлю /user/‹username›/topic/private, он автоматически попадет к пользователю (если пользователь, конечно, подписан на тему). Так что для моего примера мне не нужно было писать код Java. См. раздел 25.4.11 docs.spring.io/spring/docs/current/spring-framework-reference/. Я думаю, что это предложение «Если у пользователя более одного сеанса, по умолчанию все сеансы, подписанные на данный пункт назначения, являются целевыми». это то, что я должен изучить больше и немного поэкспериментировать - person Geert Olaerts; 12.03.2016