type
status
date
slug
summary
tags
category
icon
password
在 Dart 中,
Stream
提供了两种订阅模式,分别是 单订阅(Single Subscription) 和 广播(Broadcast)订阅。这两种模式在使用场景和特性上有所不同。1. 单订阅模式(Single Subscription Stream)
单订阅流(默认)是指同一时刻只能有一个监听器的流,这意味着只能被订阅一次。适用于处理一次性数据流,或者在生命周期内只会有一个订阅者的情况,比如从文件读取数据、网络请求返回的数据流等。
特性
- 只能订阅一次:一旦有一个监听器监听该流,再尝试监听会导致错误。
- 按顺序接收事件:每个事件会按顺序被处理,数据流不会分发给多个订阅者。
- 典型应用场景:读取文件、HTTP 响应、用户输入等不需要多个订阅的场景。
示例
2. 广播模式(Broadcast Stream)
广播流是指支持多个监听器的流。广播流允许多个订阅者同时监听,同一个事件会被分发给所有订阅者。适用于数据需要同时被多个监听者使用的情况,比如用户点击事件流、WebSocket 数据流等。
特性
- 支持多个订阅:允许在同一时间内有多个监听器。
- 即使没有订阅者也会持续发送数据:广播流不会等待监听器的注册。
- 典型应用场景:事件总线(Event Bus)、WebSocket 数据流、全局共享的流等。
示例
如何创建广播流
将单订阅流转换为广播流非常简单,调用
asBroadcastStream()
即可将单订阅流转为广播流。这样同一流就可以被多个监听器订阅了。总结
- 单订阅流:只允许一个订阅者,适用于一次性数据流的情况。
- 广播流:支持多个订阅者,可以同时将数据分发给多个监听器。
<ins/>