如何实现单次使用有序的ReplaySubject?
How to implement a single use ordered ReplaySubject?
我怎样才能拥有一个 ReplaySubject
的单一订阅者:
- 缓冲所有通过
onNext()
收到的事件,直到有人订阅它,
- 一旦有人订阅它,所有缓冲的事件都会转发给订阅者,从
ReplaySubject
缓冲区中删除它们(出于性能原因),后续事件只会转发给订阅者(不再缓冲),
- 如果有多个观察者订阅,则抛出异常,
- 提供给主题的所有缓冲事件都根据每个事件的生成时间排序,并在订阅期间按该顺序转发给订阅者?
另外,这有意义吗?我认为这个主题会有很好的用例,例如它从文件系统转发事件的情况...
有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 it and if 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
我怎样才能拥有一个 ReplaySubject
的单一订阅者:
- 缓冲所有通过
onNext()
收到的事件,直到有人订阅它, - 一旦有人订阅它,所有缓冲的事件都会转发给订阅者,从
ReplaySubject
缓冲区中删除它们(出于性能原因),后续事件只会转发给订阅者(不再缓冲), - 如果有多个观察者订阅,则抛出异常,
- 提供给主题的所有缓冲事件都根据每个事件的生成时间排序,并在订阅期间按该顺序转发给订阅者?
另外,这有意义吗?我认为这个主题会有很好的用例,例如它从文件系统转发事件的情况...
有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 it and if 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