如何使用Kotlin流轮询资源并发出它?
我想用Kotlin流做一个永久循环和发送结果的好逻辑。用例是每n分钟我需要更新应用程序中的一个配置,该配置来自RESTAPI 我认为一个很好的解决方案是运行一个“调度器”,在后台每n分钟轮询一次api,并且订阅此调度器的如何使用Kotlin流轮询资源并发出它?,kotlin,coroutine,kotlin-coroutines,flow,Kotlin,Coroutine,Kotlin Coroutines,Flow,我想用Kotlin流做一个永久循环和发送结果的好逻辑。用例是每n分钟我需要更新应用程序中的一个配置,该配置来自RESTAPI 我认为一个很好的解决方案是运行一个“调度器”,在后台每n分钟轮询一次api,并且订阅此调度器的ConfigService可以在调度器发出新值时更新其自身的状态 使用RxJava,这将是 Observable.interval(n, TimeUnit.MINUTES) .flatMap( ... ) 但是由于我使用的是Kotlin,我认为我可以用本
ConfigService
可以在调度器发出新值时更新其自身的状态
使用RxJava,这将是
Observable.interval(n, TimeUnit.MINUTES)
.flatMap( ... )
但是由于我使用的是Kotlin,我认为我可以用本机流库实现相同的逻辑。那会是什么样子?我试图用谷歌搜索,要么没有找到正确的关键字,要么就是以前没有人遇到过同样的问题?基本上你使用flow builder函数,调用suspending函数获取数据,然后
发出结果
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.flow
import kotlin.time.minutes
flow<ApiResult> {
while (true) {
emit(fetchApi())
delay(10.minutes)
}
}
导入kotlinx.coroutines.delay
导入kotlinx.coroutines.flow.flow
导入kotlin.time.minutes
流动。旧的for通道(可能转换为流)已被弃用,绝对不应使用。我正在这样做,但这是我们能做的最好的atm吗?好的,或者您当然可以创建自己的ticker函数返回流和(平面)映射。这不可能在服务器中充当DDOS吗(如果用户是百万或十亿)@赫拉契特视情况而定。如果您有milion或bilion用户,您的后端服务器具有良好的可扩展性,能够处理此类金额的请求。其次,这取决于您希望刷新的频率。您还可以部署其他策略,如web套接字或推送通知,以允许用户在发生某些事情时进行刷新,而不进行轮询。