What are the Hot and Cold observables?

I watched the video and I know the general principles - hot happens even when nobody is subscribed, cold happens "on demand". Also, Publish() converts cold to hot and Defer() converts hot to cold.

But still, I feel I am missing the details. Here are some questions I'd like to have answered:

  • Can you give a comprehensive definition for these terms?
  • Does it ever make sense to call Publish on a hot observable or Defer on a cold?
  • What are the aspects of Hot/Cold conversions - do you lose messages, for example?
  • Are there differences between hot and cold definitions for IObservable and IEnumerable?
  • What are the general principles you should take into account when programming for cold or hot?
  • Any other tips on hot/cold observables?
53098 次浏览

热可观测的是那些推动事件当你不订阅的可观测。比如鼠标移动,计时器滴答之类的。冷观察是只有当你订阅时才开始推动的,如果你再订阅,它们就会重新开始。

希望这个能帮上忙。

你能给出一个全面的 这些术语的定义是什么?

请看我的博客文章: https://leecampbell.com/2010/08/19/rx-part-7-hot-and-cold-observables

打电话给我 在可观察到的热点上发布或推迟发布 感冒了?

没有,我想没有。

What are the aspects of Hot/Cold 转换-你丢失的信息, for example?

当可观察消息处于热状态时,可能会“丢失”消息,因为不管订阅者如何,“事件”都会发生。

“热”和“热”有什么区别吗 IObable 和 IObable 的冷定义 数不清?

我真的不明白这个问题。我希望这个类比能有所帮助。我会将热可观测值与热心计算的 IEnumable 进行比较。即一个列表或一个数组都急于求值,并已填充,即使没有人枚举超过他们。从文件或数据库获取值的屈服值语句可以使用屈服值关键字进行延迟计算。虽然延迟可能是好的,但是默认情况下,如果第二个枚举器在它上面运行,它将被重新计算。与 Observables 相比,一个热点观测可能是一个事件(按钮点击)或一个温度反馈,这些事件将发生无论订阅,也将共享如果多个订阅同一天文台。显而易见。间隔是冷可观测的一个很好的例子。它只有在订阅时才开始生成值。如果订阅了多个订阅,那么将重新计算序列,并且“事件”将在不同的时间发生(取决于订阅之间的时间)。

在编写冷编程或热编程时应该考虑的一般原则是什么?

请参考第一点中的链接。我还建议您查看与 RefCount 一起使用的发布。这允许您拥有冷可观测数据的惰性评估语义的能力,但是可以共享热可观测数据所获得的事件。

还有什么建议吗 可观察到的?

把你的手弄脏,然后和他们玩一玩。一旦你阅读它们超过30分钟,那么花在编写代码上的时间对你来说比阅读更有效率:)

不是假装给出一个全面的答案,我想用最简单的形式总结一下自从这个问题以来我所学到的东西。

Hot Observatory able 与事件完全匹配。在事件中,即使没有订阅者在监听,也通常将值提供给处理程序。所有订阅方都接收同一组值。由于遵循“事件”模式,热观测值比冷观测值 更容易理解

Cold Observatory able 也类似于一个事件,但是有一点不同—— Cold Observer 的事件不是共享实例上的属性,而是每次有人订阅时从工厂生成的对象上的属性。此外,订阅开始生成值。由于上述原因,多个订阅方被隔离,每个订阅方都接收自己的一组值。

RX 初学者最常犯的错误是使用函数中的一些状态变量(比如累计总量)创建一个冷可观测值(当然,他们认为自己创建的是一个冷可观测值) ,而没有将其包装成一个。Defer ()语句。因此,多个订阅者共享这些变量,并在它们之间产生副作用。

来自: Anton Moiseev’s Book “带打字的角度发展,第二版”:

冷热观测

类型的 可观察到的: 冷热。主要 区别在于 冷冰冰的创造 a 数据 对于 每个用户,生产者 ,而 a < strong > 热可观察到 创建 a 首先是数据生成器,而 每个用户获取 数据 来自 一个制片人starting来自 那一刻

让我们比较一下在 Netflix上观看 电影和观看 电影院。把自己想象成 观察者。任何决定在 Netflix 上观看《碟中谍》的人都可以得到 movie, regardless of when they hit the play button. Netflix creates a new 制片人 to stream a movie just for you. This is a cold 可见

如果你去电影院,表演时间是下午4点,制片人 是在下午4点创建的,流媒体开始播放。如果一些人 (订户)都迟到了,他们错过了节目的开始 电影,只能从到达的那一刻开始看。这 是 非常引人注目

当某些代码调用 subscribe() function on it. For example, your app may declare an observable providing a URL on the server to get certain products. The 请求将只有在您订阅它时才会发出。如果另一个脚本 向服务器发出相同的请求,它将获得相同的数据集。

即使没有订阅者,hot observable也会生成数据 感兴趣的数据。例如,在您的加速度计 智能手机产生有关你的设备位置的数据,即使没有 应用程序订阅此数据。服务器可以生成最新的股票 价格,即使没有用户对此股票感兴趣。