Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Kotlin流轮询资源并发出它?_Kotlin_Coroutine_Kotlin Coroutines_Flow - Fatal编程技术网

如何使用Kotlin流轮询资源并发出它?

如何使用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,我认为我可以用本

我想用Kotlin流做一个永久循环和发送结果的好逻辑。用例是每n分钟我需要更新应用程序中的一个配置,该配置来自RESTAPI

我认为一个很好的解决方案是运行一个“调度器”,在后台每n分钟轮询一次api,并且订阅此调度器的
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套接字或推送通知,以允许用户在发生某些事情时进行刷新,而不进行轮询。