#angular #stompjs
#angular #stompjs
Вопрос:
Следуя этому руководству по использованию stompjs в angular, я пытаюсь определить архитектуру для использования его в качестве веб-сокета для подписки на уведомления в реальном времени через веб-сокет, который у меня есть.
В моем корневом компоненте у меня есть 2 страницы / компонента, которые будут использовать одну и ту же тему для подписки. Правильно ли инициировать тему просмотра в root (app.component.ts) или мне следует инициировать тему просмотра в 2 соответствующих компонентах и отказаться от подписки при уничтожении?
Ответ №1:
Очень интересный вопрос. Давайте подробно обсудим поведение.
Наблюдение довольно интересное. Он возвращает наблюдаемый объект. При этом subject
может быть вызвано несколько подписок (точнее, RxJS подписывается). По-прежнему будет существовать одна базовая подписка. Когда последняя подписка (RxJS) отменяется, базовая подписка на STOMP будет отменена.
Итак, в родительском компоненте вы должны создать watch:
watchTopic$ = this.rxStompService.watch('/topic/demo');
Передать watchTopic$
дочерним элементам (возможно, в качестве входного параметра или через сервис).
Внутри каждого компонента:
topicSubscription = watchTopic$.subscribe((message: Message) => {
// use it
});
// Typically onDestroy
topicSubscription.unsubscribe();
Как только эта структура настроена, базовая подписка на STOMP будет инициирована с первым активным подписчиком и будет прекращена, когда последний подписчик уйдет.
Для справки, я человек, который написал руководство, упомянутое в вопросе.