我想在订阅者时创建并保留单个套接字,当我不再拥有订阅者时断开连接并在订阅者返回时重新连接。
这是我到目前为止所做的,但当订阅者取消订阅套接字时,每个人都会断开连接。
Add
答案 0 :(得分:1)
这并不是您想要的,因为您每次拨打getValue()
时都会创建一个新的Observable。例如,当您拨打getValue()
两次并订阅它们时,您将拥有两个不同的Observable。然后,如果您取消订阅其中任何一个,您将为每个使用它的Observable关闭套接字连接。
因此,更好的方法是将Observable保持为与share()
运算符链接的单独变量,该运算符将始终只保留对其源Observable的一个订阅,并在所有观察者取消订阅时取消订阅。
private socket$: Observable<string> = new Observable<string>(
observer => {
this.socket.on('value', (data) => {
let v = data['value'];
observer.next(v);
});
return () => this.socket.disconnect();
})
.share();
public getValue(): Observable<string> {
return this.socket$;
}