2016-05-11 29 views
2

怎樣纔可以有一個單用戶ReplaySubject認爲:如何實現單次使用訂購的ReplaySubject?

  1. 緩衝區與onNext()收到的所有事件,直到有人訂閱它,
  2. 一旦有人訂閱它,所有緩存事件轉發到用戶,擦除他們從ReplaySubject緩衝液(出於性能原因)和隨後的事件僅轉發到用戶(沒有更多的緩衝),
  3. 如果多於一個觀察者預訂它,則拋出異常,
  4. 所有緩衝的EV根據每個事件生成的時間排序,並在訂閱期間按訂單的順序將訂單轉發給訂戶?

此外,這是否有意義?我認爲這個主題會有很好的用例,例如當它從文件系統轉發事件時...

回答

3

爲此目的,有UnicastSubject,雖然它不是官方API的一部分;這意味着它可以在沒有警告的情況下更改或刪除。

編輯

讓我點你,你所要求的功能:

1)緩衝的所有事件:

If there is no child or it hasn't caught up: store the element in the queue

2)當認購,緩衝區消費並重播給訂戶

The drain loop will poll from the queue and consume itif the Subscriber caught up, will emit to it directly

3)如果多於一個觀察者預訂它,則拋出異常

A subsequent subscriber will get an exception

4)給予所述受試者的所有緩衝的事件排序基於當被生成的每個事件的時間

Uses a single-producer single-consumer queue that guarantees FIFO order

+0

在我提到的4個項目中,UnicastSubject只滿足第3項(在超過1個用戶的情況下爲例外)......也許會有一個簡單的方法來實現這樣一個主題tch,所有4件物品都滿足了? –

+0

你是什麼意思?看看這一行:https://github.com/ReactiveX/RxJava/blob/1.x/src/main/java/rx/internal/operators/UnicastSubject.java#L256 – akarnokd

+0

準確地說...這是項目編號3,我建議的4 ...單播主題不*執行1,2或4,所以它不回答這個問題... –