4

我怎样才能拥有一个单一订阅者ReplaySubject

  1. 缓冲所有接收到的事件,onNext()直到有人订阅它,
  2. 一旦有人订阅它,所有缓冲的事件都会转发给订阅者,从ReplaySubject缓冲区中删除它们(出于性能原因),后续事件仅转发给订阅者(不再缓冲),
  3. 如果多个观察者订阅它,则抛出异常,
  4. 给主题的所有缓冲事件都根据每个事件的生成时间排序,并在订阅期间按该顺序转发给订阅者?

另外,这有意义吗?我认为这个主题会有很好的用例,例如它从文件系统转发事件的情况......

4

1 回答 1

4

UnicastSubject这个目的,虽然它不是官方 API 的一部分;这意味着它可以在没有警告的情况下更改或删除。

编辑

让我指出您要求的功能:

1) 缓冲所有事件:

如果没有子元素或它没有赶上:将元素存储在队列中

2) 订阅时,缓冲区被消耗并重播给订阅者

排水循环将从队列中轮询并使用它如果订阅者赶上,将直接向它发出

3) 如果有多个观察者订阅它,则抛出异常

后续订阅者将获得异常

4) 给予主体的所有缓冲事件都根据每个事件产生的时间排序

使用保证先进先出顺序的单生产者单消费者队列

于 2016-05-11T16:43:55.707 回答