可观察到使用共享的RxJS重新连接WebSocket

右折

我有一个这样的观察:

const records$ =
    Rx.DOM.fromWebSocket('ws://192.168.2.4:9001/feed/', null)
    .map(ev => parseRecord(ev.data))
    .share();

我有很多订阅者。连接断开后,所有订户都将退订:

let records$Subscription;
records$Subscription = records$.subscribe(
    record => { ... },
    error => records$Subscription.dispose()
);

我确认dispose确实确实对每个订阅都拨打了一次电话因此,share引用计数已达到零。

但是,当我现在records$再次订阅时,没有建立新的WebSocket连接。share但是,当我删除对的呼叫时,它为什么这与预期不符share

用户名

我相信在rxjs v5中,share确实允许您重新连接,但在Rxjs v4中却不允许。

在Rxjs 4,share是basciallymulticast.refCount一旦用于组播主体建成后,不能重复使用(每Rxjs语法规则,看看有什么不同RxJS学科的语义?太),导致您观察到的行为。

在Rxjs 5中,它使用主题工厂(类似multicast(() => new Rx.Suject().refCount())),因此在必要时可以重新创建主题。

有关更多详细信息,请参见此处此处的问题

简而言之,如果您无法处理当前行为,则可以切换到v5(请注意,该v5仍处于测试版中,并且有一些重大更改)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章