节气门或极限Kotlin CoRoutine计数

时间:2018-10-18 20:15:22

标签: rest http kotlin kotlinx.coroutines

我正在尝试从协程中访问http服务。我可能必须打一百万次服务。我宁愿并行执行此操作,因为它们彼此独立,同时我也不想使用该服务。我想节制协程(某种背压)

我知道我可以将请求批处理为可接受的并发请求数。但是,我认为那太样板了。有没有http库以惯用的方式处理

1 个答案:

答案 0 :(得分:2)

选项1:

Dim Vbc As VBComponent For Each Vbc In ThisWorkbook.VBProject.VBComponents If Vbc.Type <> 100 Then ‘ to exclude worksheets Vbc.Activate ‘ Try with or Without this line Debug.Print Vbc.Name & " has " & Vbc.Properties.Count & " Properties" End If Next Vbc OK HTTP可以限制请求数量:

retrofit

您可以在此处查看示例:OkHttpClient limit number of connections?
有一个用于协程的适配器:https://github.com/JakeWharton/retrofit2-kotlin-coroutines-adapter
因此,两者都能满足您的需求。

选项2:

Dispatcher dispatcher = new Dispatcher(); dispatcher.setMaxRequests(100); dispatcher.setMaxRequestsPerHost(10); OkHttpClient client = new OkHttpClient.Builder() .dispatcher(dispatcher) .build(); 使用改造,该改造也有一个适配器:https://github.com/AsyncHttpClient/async-http-client/tree/master/extras/retrofit2

然后像这样限制资源:

AsyncHttpClient

该示例来自Wiki:https://github.com/AsyncHttpClient/async-http-client/wiki/Connection-pooling

选项3:

使用上述客户端之一(或任何其他客户端)而不进行改造。然后自己包装回调,或找到一个已经完成该操作的库(存在许多回调类型):https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md#wrapping-callbacks