按照this guide for using stompjs in angular,我试图找出将其用作网络套接字的架构,以通过我拥有的网络套接字订阅实时通知。
在我的根组件中,我有 2 个页面/组件,它们将使用相同的主题来订阅。在根目录(app.component.ts)中启动监视主题是否正确,或者我应该在两个各自的组件中启动监视主题,并在销毁时取消订阅?
非常有趣的问题。让我们仔细讨论这种行为。
手表很有趣。它返回一个可观察的主题。在此subject
,可以调用多个订阅(准确地说是 RxJS 订阅)。仍然会有一个基础认购。当最后一个订阅(RxJS)被取消订阅时,底层的 STOMP 订阅将被取消订阅。
所以在父组件中,你应该创建手表:
watchTopic$ = this.rxStompService.watch('/topic/demo');
传递watchTopic$
给孩子(可能作为输入参数或通过服务)。
在每个组件中:
topicSubscription = watchTopic$.subscribe((message: Message) => {
// use it
});
// Typically onDestroy
topicSubscription.unsubscribe();
一旦建立了这个结构,底层 STOMP 订阅将由第一个活跃订阅者发起,并在最后一个订阅者离开时终止。
作为参考,我是编写问题中提到的指南的人。