【发布时间】:2016-04-28 19:56:11
【问题描述】:
我阅读了有关用户目的地的 Spring 文档。
我想使用convertAndSendToUser 方法仅向特定用户发送消息。
这是java代码:
@Controller
public class WebsocketTest {
@Autowired
public SimpMessageSendingOperations messagingTemplate;
@PostConstruct
public void init(){
ScheduledExecutorService statusTimerExecutor=Executors.newSingleThreadScheduledExecutor();
statusTimerExecutor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
messagingTemplate.convertAndSendToUser("myuser","/queue/test", new Return("test"));
}
}, 5000,5000, TimeUnit.MILLISECONDS);
}
}
这是客户端js代码:
var socket = new WebSocket('ws://localhost:8080/hello');
stompClient = Stomp.over(socket);
stompClient.connect("myuser","mypass", function(frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).value);
});
stompClient.subscribe('/user/queue/test', function(greeting){
showGreeting(JSON.parse(greeting.body).value);
});
});
首先考虑用户价值这一点是否正确?
stompClient.connect("myuser",...
为什么这个测试不起作用?该用户未收到任何消息。
如果我将目的地切换到/topic/greetings 并将方法更改为convertAndSend(),这可以工作,但显然作为广播,而不仅仅是根据请求向特定用户发送。
小更新
我尝试使用此代码设置对单个用户的回复:
@MessageMapping("/hello")
@SendToUser("/queue/test")
public Return test(){
return new Return("test");
}
这行得通,这不是我需要的,因为这个回复只是对来自客户的消息。似乎我不能将convertAndSendToUser() 用于来自服务器的未经请求的消息。
【问题讨论】:
标签: java spring spring-mvc websocket spring-websocket