来自rxjava扩展的MulticastProcessor
的目的是什么?例如,有一个源和两个接收器,正常模式是:
Flowable<T> f = ...
ConnectableFlowable<T> published = f.publish();
published.map(mapper1).subscribe(s1);
published.map(mapper2).subscribe(s2);
published.connect();
据我了解,MulticastProcessor
的等效代码为:
Flowable<T> f = ...
MulticastProcessor<T> mp = MulticastProcessor.create(true);
mp.map(mapper1).subscribe(s1);
mp.map(mapper2).subscribe(s1);
f.subscribe(mp);
假设这两段代码是等价的,那么何时使用其中一段代码。 MulticastProcessor
的javadoc似乎有点过于简洁。
答案 0 :(得分:1)
您是否阅读了相关的guide entry?
与
publish(Function)
类似,并且如果所有项都准备好接收项,则向订阅者多播项。 此外,它支持最后一个订户取消将触发上游取消的模式。 如果您需要在不预订MulticastProcessor
到另一个Publisher
的情况下运行start()
或startUnbounded()
。 使用offer()
尝试提供/发出项目,但如果内部缓冲区已满,则不会失败。
MulticastProcessor<Integer> mp = Flowable.range(1, 10)
.subscribeWith(MulticastProcessor.create());
mp.test().assertResult(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// --------------------
MulticastProcessor<Integer> mp2 = MulticastProcessor.create(4);
mp2.start();
assertTrue(mp2.offer(1));
assertTrue(mp2.offer(2));
assertTrue(mp2.offer(3));
assertTrue(mp2.offer(4));
assertFalse(mp2.offer(5));
mp2.onComplete();
mp2.test().assertResult(1, 2, 3, 4);
标准PublishProcessor
不等同于publish()
运算符,因为前者不协调下游请求。此外,Reactive Streams和TCK的某些实现期望处理器在所有下游Subscriber
取消订阅时取消其上游,类似于refCount
与RxJava特定ConnectableFlowable
的工作方式。 MulticastProcessor
也可以支持此行为。