一个订阅 可以由一个发布者和一个订阅者完全共享,以进行数据 交换。这就是为什么subscription ()方法不返回创建的Subscription而是返回void的原因。订阅仅通过onSubscribe()方法回调传递给订阅服务器。Subscription接口包含两个方法:request()和cancel()。
public interface Subscription { public void request(long n); public void cancel(); }
订阅接口规则:
Subscription.request()和Subscription.cancel()方法必须仅在其Subscriber上下文内调用。
订阅必须允许订阅者从onNext()或onSubscribe()方法内部同步调用Subscription.request ()方法。
Subscription.request()方法必须在Publisher 和Subscriber之间可能的同步递归上设置一个上限。
Subscription.request()方法应通过及时返回来尊重其调用者的响应能力。
Subscription.cancel()方法必须通过及时返回来尊重其调用者的响应能力,并且必须是线程安全的。
虽然没有取消 订阅,但是Subscription.request(long n)方法必须注册给定数量的要生成给相应订阅者的其他元素。
虽然未取消Subscription,但是如果参数<= 0 ,Subscription.request(long n) 方法必须使用IllegalArgumentException 调用onError()方法。
虽然没有取消订阅,但是Subscription.request(long n)方法可以在此订阅者或其他订阅者上同步调用onNext()方法。
虽然没有取消订阅,但是Subscription.request(long n)方法可以在此订阅者或其他订阅者上同步调用onComplete()或onError()方法。
如果未取消订阅,则Subscription.cancel()方法必须请求发布者停止发信号通知其订阅者。不需要执行该操作即可立即影响订阅。
如果未取消订阅,则Subscription.cancel()方法必须请求发布者删除对相应订阅者的任何引用。
调用Subscription.cancel()和Subscription.request()方法必须正常返回。
订阅必须支持无限数量的呼叫以请求和支持最大2 ^ 63-1的请求。 如果需求等于或大于2 ^ 63-1,发布者可以认为该需求实际上是不受限制的。