0

按照this guide for using stompjs in angular,我试图找出将其用作网络套接字的架构,以通过我拥有的网络套接字订阅实时通知。

在我的根组件中,我有 2 个页面/组件,它们将使用相同的主题来订阅。在根目录(app.component.ts)中启动监视主题是否正确,或者我应该在两个各自的组件中启动监视主题,并在销毁时取消订阅?

4

1 回答 1

0

非常有趣的问题。让我们仔细讨论这种行为。

手表很有趣。它返回一个可观察的主题。在此subject,可以调用多个订阅(准确地说是 RxJS 订阅)。仍然会有一个基础认购。当最后一个订阅(RxJS)被取消订阅时,底层的 STOMP 订阅将被取消订阅。

所以在父组件中,你应该创建手表:

watchTopic$ = this.rxStompService.watch('/topic/demo');

传递watchTopic$给孩子(可能作为输入参数或通过服务)。

在每个组件中:

topicSubscription = watchTopic$.subscribe((message: Message) => {
      // use it
    });


// Typically onDestroy
topicSubscription.unsubscribe();

一旦建立了这个结构,底层 STOMP 订阅将由第一个活跃订阅者发起,并在最后一个订阅者离开时终止。

作为参考,我是编写问题中提到的指南的人。

于 2021-08-09T13:25:35.833 回答