簡體   English   中英

RXScala中的熱和冷可觀測量有什么區別?

[英]What is the difference between hot and cold observables in RXScala?

我知道熱和冷可觀察量之間的區別之前已經在C#的上下文中討論了Stack Overflow ,但我根本不了解C#並且不理解Lee Campbell所指的代碼示例。

我在Scala工作,使用RXScala庫。 什么是Scala中的冷熱可觀測量,以及它們如何使用RXScala實現?

冷觀察

冷可觀察性是可觀察的,在訂閱時開始產生價值。

被動的流並根據請求開始發布。

一些例子:

import rx.lang.scala._
import org.joda.time._

val onetwothree = Observable.just(1, 2, 3) // when subscribed each subscriber will get 1, 2, and 3
// scala> onetwothree.subscribe(println(_))
// 1
// 2
// 3
// res1: rx.lang.scala.Subscription = rx.lang.scala.Subscription$$anon$2@11be372a

// When subscribed will get one event with current DateTime
val currentTime = Observable.defer {
  Observable.just(DateTime.now)
}
// scala> currentTime.subscribe(println(_))
// 2015-01-19T14:13:37.333+02:00

// scala> currentTime.subscribe(println(_))
// 2015-01-19T14:13:38.742+02:00

// scala> currentTime.subscribe(println(_))
// 2015-01-19T14:13:40.448+02:00

// And this one is tricky.
val loggedInUsers = Obserable.defer {
  fetchLoggedUsersFromDb
}

熱門觀察

無論訂閱如何,都處於活動狀態並發布的流。

自然的例子來自UI編程:鼠標點擊流。 無論是否訂閱了流,都會產生點擊。

在許多應用程序中, loggedInUsers被稱為溫暖可觀察的東西:

val loggedInUsers = updateTriggers.concatMap { _ => 
  fetchLoggedUsersFromDb
}.replay(1)

當上次觸發updateTriggers時,此流的subriber將立即獲得一個值,即已記錄的用戶。 還有連續的更新。


溫暖的觀察

val hot = mouseClicks

// Observable that will replay all of its items and notifications to any future Observer
// i.e. all mouseClicks from the time point we called `.replay`
val cold = hot.replay

但是之間有一些東西:

// Observable that will replay at most 10 items emitted by `hot`
val warm = hot.replay(10) 

當我們訂閱warm它會立即發出最后10次點擊,並在此之后繼續發出點擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM