สตรีมแบบเดี่ยวกับแบบกระจายเสียง
เลือกสตรีมที่เหมาะกับผู้รับฟังหลายราย
สตรีมแบบเดี่ยวกับแบบกระจายเสียง เป็นบทเรียน Dart Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Dart Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน
สตรีมสองประเภท
สตรีมของ Dart มีสองรูปแบบ ได้แก่ แบบสมัครรับครั้งเดียวและแบบ broadcast การเลือกประเภทที่เหมาะสมขึ้นอยู่กับจำนวนผู้รับฟังที่คุณต้องการ
สตรีมแบบสมัครรับครั้งเดียว
สตรีมแบบ สมัครรับครั้งเดียว อนุญาตให้มีผู้รับฟังได้เพียงรายเดียวตลอดอายุการใช้งาน ซึ่งเป็นค่าเริ่มต้นและเหมาะอย่างยิ่งสำหรับลำดับข้อมูลที่อ่านเพียงครั้งเดียว เช่น การอ่านไฟล์ 📄
รับฟังได้เพียงครั้งเดียว
หากลองใช้ listen กับสตรีมแบบสมัครรับครั้งเดียวเป็นครั้งที่สอง Dart จะโยน StateError ออกมา สตรีมจะจดจำว่ามีผู้รับฟังครบหนึ่งรายแล้ว
final s = Stream.fromIterable([1, 2]);
s.listen(print);
s.listen(print); // throws StateErrorเก็บข้อมูลไว้จนกว่าจะเริ่มรับฟัง
สตรีมแบบสมัครรับครั้งเดียวจะรออย่างอดทน สตรีมจะไม่สร้างเหตุการณ์จนกว่าจะมีบางสิ่งเริ่มรับฟัง ดังนั้นจึงไม่มีค่าถูกพลาดไป
สตรีมแบบกระจาย
สตรีมแบบ broadcast อนุญาตให้ผู้รับฟังหลายรายสมัครรับพร้อมกันได้ ผู้รับฟังที่กำลังใช้งานอยู่แต่ละรายจะได้รับเหตุการณ์เดียวกันเมื่อเหตุการณ์เหล่านั้นเกิดขึ้น 📡
แปลงเป็นสตรีมแบบกระจาย
เปลี่ยนสตรีมแบบสมัครรับครั้งเดียวให้เป็นสตรีมที่ใช้ร่วมกันได้ด้วยการเรียกใช้ asBroadcastStream จากนั้นผู้รับฟังหลายรายก็สามารถเชื่อมต่อเข้ามาได้
final shared = source.asBroadcastStream();
shared.listen(print);
shared.listen((v) => log(v));ผู้รับฟังที่มาช้าจะพลาดเหตุการณ์
สตรีมแบบกระจายจะไม่เก็บเหตุการณ์ไว้ ผู้รับฟังที่สมัครรับ ภายหลัง จะเห็นเฉพาะเหตุการณ์ที่ส่งออกมาตั้งแต่เวลานั้นเป็นต้นไป และจะไม่เห็นเหตุการณ์ก่อนหน้า
ตัวควบคุมเป็นตัวเลือกประเภท
StreamController จะสร้างสตรีมแบบสมัครรับครั้งเดียวเป็นค่าเริ่มต้น ให้ใช้ตัวสร้างแบบ broadcast เมื่อต้องการมีผู้รับฟังหลายราย
final ctrl = StreamController<int>.broadcast();
ctrl.stream.listen(print);เมื่อใดควรใช้แบบสมัครรับครั้งเดียว
เลือกใช้สตรีมแบบ สมัครรับครั้งเดียว เมื่อข้อมูลไหลไปยังผู้รับข้อมูลรายเดียวเพียงครั้งเดียว เช่น ไบต์ของการตอบกลับจากเครือข่ายหรือข้อมูลที่อ่านจากไฟล์
เมื่อใดควรใช้แบบกระจาย
เลือกใช้สตรีมแบบ broadcast สำหรับเหตุการณ์ที่เกิดขึ้นต่อเนื่องและมีหลายส่วนของแอปที่ต้องการข้อมูล เช่น การแตะปุ่มหรือการอัปเดตจากเซนเซอร์แบบเรียลไทม์
ตรวจสอบก่อนเริ่มรับฟัง
ไม่แน่ใจว่าคุณมีสตรีมประเภทใดใช่หรือไม่ พร็อพเพอร์ตี isBroadcast จะบอกคุณได้ จึงช่วยหลีกเลี่ยง StateError จากการรับฟังซ้ำในสตรีมแบบสมัครรับครั้งเดียว
if (!stream.isBroadcast) {
// only one listener allowed
}ตรวจสอบความเข้าใจ
สตรีมประเภทใดเหมาะกับผู้รับฟังหลายราย
ทบทวน
สตรีมแบบสมัครรับครั้งเดียวรองรับผู้รับฟัง หนึ่งราย และเก็บข้อมูลไว้จนกว่าจะมีการอ่าน ส่วนสตรีมแบบ broadcast รองรับหลายรายแต่จะข้ามเหตุการณ์ที่เกิดขึ้นไปแล้ว ให้เลือกตามจำนวนผู้รับฟัง 🎉
คำถามที่พบบ่อย
บทเรียน “สตรีมแบบเดี่ยวกับแบบกระจายเสียง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “สตรีมแบบเดี่ยวกับแบบกระจายเสียง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Dart Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “สตรีมแบบเดี่ยวกับแบบกระจายเสียง”
เลือกสตรีมที่เหมาะกับผู้รับฟังหลายราย คุณปฏิบัติ Dart Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Dart Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Dart Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “สตรีมแบบเดี่ยวกับแบบกระจายเสียง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Dart Academy นี้ได้ไหม
ได้ บทเรียน Dart Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รับฟังด้วย await for
- สตรีมแบบเดี่ยวกับแบบกระจายเสียง
- แปลงสตรีม: map, where และ take
- สร้างสตรีมด้วย async*