zukkeyの技術奮闘記

”当たり前”が誰かのためになる、はず

RxKotlin:{Cold? or Hot?}編

はじめに

前回はRxJavaにおけるSchedulerについて書きました。

 

rozkey.hatenablog.com

 

今回はRxjavaにおける、Coldな生産者(Flowable / Observable)とHot(Flowable / Observable)な生産者についてお話します。

 

Coldな生産者とHotな生産者の違い

RxJavaにおいて生産者には二種類あり、Coldな生産者とHotな生産者があります。

 

Coldな生産者は、生産者と消費者は1対1の関係になり、Hotな生産者は、生産者と消費者は1対nの関係になります。

 

Coldな生産者の場合subscribeされるたびにデータストリームとなるタイムラインが形成されますが、Hotな生産者の場合は1つのタイムラインからしかデータを通知されず複数の消費者がsubscribeして購読することが可能です。

 

画像で対比してみると以下のようなイメージです。

雑にですが作成してみました。

Coldの場合

f:id:rozkey59:20180217145337p:plain

Hotの場合

f:id:rozkey59:20180217145839p:plain

Coldの場合は別のデータストリームで処理を行うことが予期されますが、Hotの場合は消費者が複数購読できるので、途中から同じデータを取り出して処理を行いたいなどの時に使えると思います。

HotなFlowable / Observable

HotなFlowable / ObservableはColdなFlowable / Observableから変換するオペレータによって作り出すことができます。

 変換するためのオペレータは、publish、replay、shareがありますので今回はそちらのオペレータについての理解を書き残しておきたいと思います。

 

ColdからHotに変換するオペレータ

publish

publishメソッドではColdなFlowable / ObservableをHotなFlowable / Observableに変換できるオペレータです。

このメソッドでConnectableFlowable / ConnectableObservableが生成され(HotなFlowable / Observable)、この後に購読した消費者に対してデータ通知を行います。

 

replay

replayメソッドは基本的にpublishと同じですが、最初にデータをキャッシュしておき新たに購読した消費者に対して最初にキャッシュしたデータを通知してそのあとはpublishと同じです。

 

share

shareメソッドではColdなFlowable / ObservableからHotなFlowable / Observableを生成することができます。このメソッドではConnectableFlowable / ConnectableObservableを生成しないというのが特徴です。購読している消費者がいる間は複数の消費者に対して同じデータを通知できます。

 

さいごに

今回はColdな生産者とHotな生産者の違いについてと変換して生成するためのオペレータに対する理解を自分なりにまとめてかみ砕いてみました。

今度は実際にRxをアプリにどう生かしたり使ったりしていけばいいのかというものをサンプルアプリを作って説明していきたいと思います。