На стороне клиента JavaScript У меня естьStomp над WebSocket использованием Spring и sockJS сообщение потеряли
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.
«перед отправкой» всегда регистрируется на стороне сервера.
Похоже, что MessageSendingOperations не готов, когда я вызываю его в методе subscribe(). (если я поставил Thread.sleep (50), перед тем как позвонить messagingTemplate.convertAndSend, проблема исчезнет (или, что гораздо реже будет воспроизведена))
Интересно, если кто-то испытал то же самое до и если есть событие, которое может скажите мне, что MessageSendingOperations готов или нет.
is stomp.subscribe выполняется после того, как дом готов? –
@ ᴳᵁᴵᴰᴼ Да. это верно. Я вижу, что подписка msg была отправлена из отладки Chrome для сетевого трафика websocket. Поэтому я не думаю, что это проблема с клиентской стороной. – user2001850