Отмените подписку на мультиплексированный WebSocketSubject, только когда больше нет потребителей - PullRequest
0 голосов
/ 16 октября 2018

Использование Angular 6.

Я следую рекомендациям здесь , связанным с созданием мультиплексированного 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'.

Теперь я бы хотелубедитесь, что запрос на отмену подписки отправляется на сервер только в случае отказа от подписки ОБА.В рекомендациях рекомендуется использовать команду publish:

Это потенциально опасно, поскольку один потребитель Observable может отписаться, а сервер может прекратить отправку сообщений, так как он получил сообщение об отмене подписки.Это должно быть обработано на сервере или с помощью публикации в Observable, возвращенном из 'multiplex'.

Это не вариант для обработки этого на сервере (по крайней мере, на данный момент), и яне уверен, как использовать здесь публикацию, или причины этого.

...