Rxjs: 单播和多播

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rxjs: 单播和多播相关的知识,希望对你有一定的参考价值。

参考技术A

单播的意思是,每个普通的 Observables 实例都只能被一个观察者订阅,当它被其他观察者订阅的时候会产生一个新的实例。也就是普通 Observables 被不同的观察者订阅的时候,会有多个实例,不管观察者是从何时开始订阅,每个实例都是从头开始把值发给对应的观察者。

Subject 其中的一个变体就是 BehaviorSubject,它有一个“当前值”的概念。它保存了发送给消费者的最新值,当有新的观察者订阅时,会立即从 BehaviorSubject 那接收到“当前值”,在定义一个 BehaviorSubject 时需要有初始值, 所以它始终保持有一个最新的值可以发送给后来订阅的 observer。

类似于 BehaviorSubject,可以发送旧值给新的订阅者,但是不仅是‘当前值’,还可以是之前的旧值。

只有当 Observable 执行完成时(执行 complete()),它才会将执行的最后一个值发送给观察者。

类似于了 last 运算符,他会等到 Observable 结束的时候将最后一个值发出,如果先前订阅 observer 时该 Observable 对象还没有 complete 的话,那么这个 observer 就不会接收到值,知道 Observable 完结后,才会收到它的最后一个值,如果后订阅的 observer 来到时该 Observable 对象已经完结,那么它就可以 立即 收到这个 observable 发出的最后一个值

Cold Observables 只有被 observers 订阅的时候,才会开始产生值。是单播的,有多少个订阅就会生成多少个订阅实例,每个订阅都是从第一个产生的值开始接收值,所以每个订阅接收到的值都是一样的。

Hot Observables 不管有没有被订阅都会产生值。是多播的,多个订阅共享同一个实例,是从订阅开始接受到值,每个订阅接收到的值是不同的,取决于它们是从什么时候开始订阅。

在这个年纪我还有一整个未来去面对更好的自己,你们也是。

refCount

当使用 refCount,是引用计数的 observable。
它表示当第一个订阅者开始订阅的时候,开始发送和产生值;
第二个订阅者(之后的订阅者)共享第一个订阅者的 Observables 实例,没有订阅者的时候,会自动取消订阅;之后再重新订阅,又从头开始发送值。

connect

当我们调用 ConnectableObservable.prototype.connect 方法,不管有没有被订阅,都会发送值。
订阅者共享同一个实例,订阅者接收到的值取决于它们何时开始订阅。在我们的例子中,第一个订阅等了一秒从 2 开始接受值,第二个订阅等了两秒从 3 开始接受值。

hotObservable .publish() .
所以它也需要 hotObservable$去 connect 或者是 refCount

以上是关于Rxjs: 单播和多播的主要内容,如果未能解决你的问题,请参考以下文章

网络通信中组播和多播的联系,区别分别是啥?

Kafka相关概念介绍

单播、广播和多播IP地址

Kafka相关概念介绍

单播广播组播多播

单播多播(组播)和广播的差别