Strumienie pojedyncze a rozgłoszeniowe
Wybór właściwego strumienia dla wielu odbiorców
Strumienie pojedyncze a rozgłoszeniowe to bezpłatna lekcja Dart Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Dart Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Dart Academy zawiera 4 lekcji w sumie.
Dwa rodzaje strumieni
Strumienie Dart występują w dwóch odmianach: z pojedynczą subskrypcją oraz broadcast. Wybór właściwego rodzaju zależy od liczby potrzebnych odbiorców.
Strumienie z pojedynczą subskrypcją
Strumień z pojedynczą subskrypcją pozwala przez cały czas swojego istnienia mieć dokładnie jednego odbiorcę. Jest to domyślny rodzaj strumienia i doskonale nadaje się do jednorazowych sekwencji, takich jak odczyt pliku. 📄
Tylko jedno nasłuchiwanie
Jeśli spróbują Państwo nasłuchiwać strumienia z pojedynczą subskrypcją dwa razy, Dart zgłosi StateError. Strumień pamięta, że ma już swojego jedynego odbiorcę.
final s = Stream.fromIterable([1, 2]);
s.listen(print);
s.listen(print); // throws StateErrorBuforowanie do czasu nasłuchiwania
Strumień z pojedynczą subskrypcją cierpliwie czeka. Nie generuje zdarzeń, dopóki coś nie zacznie go nasłuchiwać, więc żadna wartość nie zostaje pominięta.
Strumienie broadcast
Strumień typu broadcast pozwala wielu odbiorcom subskrybować go jednocześnie. Każdy aktywny odbiorca otrzymuje te same zdarzenia w chwili ich emisji. 📡
Konwersja na broadcast
Można zmienić strumień z pojedynczą subskrypcją w strumień współdzielony, wywołując asBroadcastStream. Od tej chwili może się do niego podłączyć wielu odbiorców.
final shared = source.asBroadcastStream();
shared.listen(print);
shared.listen((v) => log(v));Spóźnieni odbiorcy tracą zdarzenia
Strumienie broadcast nie buforują zdarzeń. Odbiorca, który zasubskrybuje strumień późno, zobaczy tylko zdarzenia wyemitowane od tego momentu, nigdy wcześniejsze.
Kontrolery określają rodzaj
Obiekt StreamController domyślnie tworzy strumień z pojedynczą subskrypcją. Jeśli potrzebnych jest wielu odbiorców, należy użyć konstruktora broadcast.
final ctrl = StreamController<int>.broadcast();
ctrl.stream.listen(print);Kiedy używać pojedynczej subskrypcji
Po strumień z pojedynczą subskrypcją warto sięgnąć, gdy dane przepływają raz do jednego odbiorcy, na przykład jako bajty odpowiedzi sieciowej lub odczytywanego pliku.
Kiedy używać broadcast
Strumień typu broadcast należy wybrać dla ciągłych zdarzeń, którymi interesuje się wiele części aplikacji, takich jak naciśnięcia przycisków lub bieżące odczyty czujników.
Sprawdź przed nasłuchiwaniem
Nie mają Państwo pewności, jaki to rodzaj strumienia? Właściwość isBroadcast podaje tę informację, dzięki czemu można uniknąć błędu StateError przy wielokrotnym nasłuchiwaniu strumieni z pojedynczą subskrypcją.
if (!stream.isBroadcast) {
// only one listener allowed
}Szybki test
Jaki strumień pasuje do wielu odbiorców?
Podsumowanie
Strumienie z pojedynczą subskrypcją obsługują jednego odbiorcę i buforują dane do czasu odczytu, a strumienie broadcast obsługują wielu odbiorców, ale pomijają wcześniejsze zdarzenia. Rodzaj należy wybrać na podstawie liczby odbiorców. 🎉
Często zadawane pytania
Czy lekcja „Strumienie pojedyncze a rozgłoszeniowe” jest bezpłatna?
Tak — pełny tekst „Strumienie pojedyncze a rozgłoszeniowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Dart Academy, przejdź na CoddyKit PRO. Kurs Dart Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Strumienie pojedyncze a rozgłoszeniowe”?
Wybór właściwego strumienia dla wielu odbiorców Ćwiczysz Dart Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Dart Academy?
Nie wymagamy żadnego doświadczenia. Dart Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Strumienie pojedyncze a rozgłoszeniowe”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Dart Academy?
Tak. Każda lekcja Dart Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Nasłuchiwanie za pomocą await for
- Strumienie pojedyncze a rozgłoszeniowe
- Transformowanie strumieni: map, where, take
- Tworzenie strumieni za pomocą async*