Description
RxJava needs to continue natively supporting both "cold" and "hot" data sources and make it easy to create both and then compose flow control and backpressure.
Reactive Streams lends itself to "cold" data sources by requiring every Publisher
to only emit in response to demand received via Subscription.request(n)
.
ReactiveX implementations on the other hand lends themselves to "hot" datasources where they immediately start emitting without complications of "demand".
RxJava 1.0 is in the middle where it supports both "cold" and "hot", but it takes effort to implement a "cold" source with the Observable.Producer
(similar to the RS Subscription
).
In RxJava 2.0 we need to embrace the RS Subscription
and "cold' behavior but allow creating "hot" data sources as easily as in RxJava 1.0.