我正在使用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的人。
答案 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()