単一購読ストリームとブロードキャストストリーム
複数のリスナーに適したストリームを選ぶ
「単一購読ストリームとブロードキャストストリーム」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。
2種類のStream
Dartのストリームには、single-subscriptionとbroadcastの2種類があります。どちらを選ぶかは、必要なListenerの数によって決まります。
Single-Subscription Stream
single-subscription streamでは、その存続期間を通してListenerを正確に1つだけ登録できます。デフォルトの種類で、ファイルの読み取りのような一度きりのシーケンスに適しています。📄
Listenは一度だけ
single-subscription streamを2回Listenしようとすると、DartはStateErrorをスローします。ストリームはすでに唯一のListenerが登録されていることを記録しています。
final s = Stream.fromIterable([1, 2]);
s.listen(print);
s.listen(print); // throws StateErrorListenされるまでバッファする
single-subscription streamは辛抱強く待機します。何かがListenを開始するまでイベントを生成しないため、値が失われることはありません。
Broadcast Stream
broadcast streamでは、同時に多くのListenerが購読できます。アクティブな各Listenerは、発生した同じイベントを受け取ります。📡
Broadcastに変換する
asBroadcastStreamを呼び出すと、single-subscription streamを共有可能なストリームに変換できます。これで複数のListenerを登録できます。
final shared = source.asBroadcastStream();
shared.listen(print);
shared.listen((v) => log(v));遅れてListenするとイベントを逃す
Broadcast streamはバッファリングしません。lateに購読したListenerが受け取れるのは、その時点以降に発行されたイベントだけで、それ以前のイベントは受け取れません。
Controllerで種類を選ぶ
StreamControllerはデフォルトでsingle-subscription streamを作成します。複数のListenerが必要な場合は、broadcastコンストラクターを使います。
final ctrl = StreamController<int>.broadcast();
ctrl.stream.listen(print);Singleを使う場面
データが1つのconsumerに一度だけ流れる場合は、single-subscription streamを使います。たとえば、ネットワークレスポンスのバイト列やファイルの読み取りなどです。
Broadcastを使う場面
アプリの複数の部分が関心を持つ継続的なイベントには、broadcast streamを選びます。ボタンのタップやセンサーのリアルタイム更新などがその例です。
Listenする前に確認する
どちらの種類か分からない場合は、isBroadcastプロパティで確認できます。これにより、single streamでの二重ListenによるStateErrorを防げます。
if (!stream.isBroadcast) {
// only one listener allowed
}簡単な確認
多くのListenerに適したストリームはどれですか?
まとめ
Single-subscription streamは1つのListenerに対応し、読み取られるまでバッファします。一方、broadcast streamは多くのListenerに対応しますが、過去のイベントはスキップします。Listenerの数で選びましょう。🎉
よくある質問
「単一購読ストリームとブロードキャストストリーム」レッスンは無料ですか?
はい。「単一購読ストリームとブロードキャストストリーム」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。
「単一購読ストリームとブロードキャストストリーム」で何を学びますか?
複数のリスナーに適したストリームを選ぶ ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Dart Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「単一購読ストリームとブロードキャストストリーム」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDart Academyレッスンでコードを書いて実行できますか?
はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- await forでリッスンする
- 単一購読ストリームとブロードキャストストリーム
- ストリームの変換:map、where、take
- async*でストリームを作成する