【发布时间】:2015-05-25 12:21:51
【问题描述】:
在客户端 javascript 我有
stomp.subscribe("/topic/path", function (message) {
console.info("message received");
});
在服务器端
public class Controller {
private final MessageSendingOperations<String> messagingTemplate;
@Autowired
public Controller(MessageSendingOperations<String> messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
@SubscribeMapping("/topic/path")
public void subscribe() {
LOGGER.info("before send");
messagingTemplate.convertAndSend(/topic/path, "msg");
}
}
在此设置中,我偶尔(大约在 30 次页面刷新中出现一次)遇到消息丢失,这意味着我在客户端既看不到“收到消息”消息,也看不到来自 Chrome 调试工具的 websocket 流量。
“发送前”始终记录在服务器端。
当我在 subscribe() 方法中调用 MessageSendingOperations 时,它看起来还没有准备好。 (如果我把 Thread.sleep(50); 在调用 messingTemplate.convertAndSend 之前,问题就会消失(或者更不可能被重现))
我想知道以前是否有人遇到过同样的情况,是否有事件可以告诉我 MessageSendingOperations 是否准备好。
【问题讨论】:
-
dom准备好后是否执行stomp.subscribe?
-
@ᴳᵁᴵᴰᴼ 是的。这是正确的。我可以看到订阅消息是从 Chrome 调试 websocket 网络流量发送的。所以我不认为这是客户端的问题。
标签: spring websocket stomp sockjs spring-websocket