Использование 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'.
Это не вариант для обработки этого на сервере (по крайней мере, на данный момент), и яне уверен, как использовать здесь публикацию, или причины этого.