2016-04-17 23 views
0

共享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 refcount已達零。

但是,當我現在再次訂閱records$時,沒有建立新的WebSocket連接。但是,當我刪除對share的呼叫時,它的。這是怎麼回事share按預期工作?

+0

您正在使用哪個版本的Rxjs? – user3743222

+0

@ user3743222 RxJS v4.1.0和RxJS-DOM v7.0.3 – rightfold

回答

1

我相信在rxjs v5,share確實允許你重新連接,但不能在Rxjs v4中。

在Rxjs 4,share是bascially multicast.refCount,一旦用於組播主體建成後,不能重複使用(每Rxjs語法規則,看看What are the semantics of different RxJS subjects?太),導致您觀察到的行爲。

在Rxjs 5中,它使用了一個主題工廠(如multicast(() => new Rx.Suject().refCount())),因此必要時會重新創建主題。

有關更多詳細信息,請參見問題herehere

總之,如果你不能處理當前的行爲,你可以切換到v5(注意它仍處於測試階段,並且有一些突破性的改變)。