仅在不存在更多使用者时才取消订阅多路复用WebSocket主题

时间:2018-10-16 20:46:22

标签: angular websocket rxjs multiplexing

使用Angular 6。

我正在遵循here准则,该准则与创建多路WebSocketSubject有关。

我的服务:

  public getStuff(topic: string): Observable<any> {
    return this.subject.multiplex(
      () => JSON.stringify({ subscribe: topic }),
      () => JSON.stringify({ unsubscribe: topic }),
      message => message.type === topic
    );
  }

我要在两个不同的地方订阅:

this.myService.getStuff('foo').subscribe(x => console.log('1st sub returns ', x));
this.myService.getStuff('foo').subscribe(x => console.log('2nd sub returns ', x));

这可以确保仅将“ foo”消息返回给每个使用者。

现在,我想确保只有两个使用者都被取消订阅时,取消订阅请求才发送到服务器。该准则建议使用发布:

  

这具有潜在的危险,因为Observable的一个使用者可能会取消订阅,并且服务器可能会由于收到取消订阅消息而停止发送消息。这需要在服务器上进行处理,或在从“多路复用”返回的Observable上使用发布。

这不是在服务器上处理此问题的选项(至少目前是这样),而且我不确定如何在此处使用publish或其背后的原因。

0 个答案:

没有答案