티스토리 뷰

http://reactivex.io/documentation/observable.html

“Hot” and “Cold” Observables
When does an Observable begin emitting its sequence of items? It depends on the Observable. A “hot” Observable may begin emitting items as soon as it is created, and so any observer who later subscribes to that Observable may start observing the sequence somewhere in the middle. A “cold” Observable, on the other hand, waits until an observer subscribes to it before it begins to emit items, and so such an observer is guaranteed to see the whole sequence from the beginning.

Hot

생성됨과 동시에 아이템을 방출합니다.

나중에 구독한 옵저버는 중간부터 시퀀스의 중간부터 관찰하기 시작합니다.

 

Cold

옵저버가 구독하기 전까지 아이템을 방출하지 않고 기다립니다.

시퀀스의 전체를 볼 수 있습니다.

 

 

let cold = Observable<Int>.create { ob in
    ob.onNext(Int.random(in: 0...10))
    return Disposables.create()
}


let num = Int.random(in: 0...10)
let hot = Observable<Int>.create { ob in
    ob.onNext(num)
    return Disposables.create()
}
//let hot = Observable.just(Int.random(in: 0...10))

cold.subscribe(onNext: { print($0)}) //9

cold.subscribe(onNext: { print($0)}) //3

hot.subscribe(onNext: {print($0)}) //2

hot.subscribe(onNext: {print($0)}) //2

Cold Observable은 unicasting

data가 Observable 안에서 생성됩니다.

Observable은 Lazy입니다. 옵저버가 구독해야 value를 실행합니다.

각각의 구독자가 Observable을 실행하면 data는 공유되지 않습니다.

Observable이 구독자마다 새로운 실행을 하기 때문에 구독자마다 값이 다 다르게 됩니다.

data 생산을 Observable밖에서 하면 Hot Observable로 만들 수 있습니다.

 

Hot Observable은 multicasting

data가 Observable 밖에서 생성됩니다.

여러 구독자가 데이터를 공유할 수 있습니다.

데이터가 생산될 때 구독자가 없으면 그 데이터는 잃어버리게 됩니다.

 

 

 

 

 

참고

https://luukgruijs.medium.com/understanding-hot-vs-cold-observables-62d04cf92e03

 

댓글
공지사항