我正在尝试从协程中访问http服务。我可能必须打一百万次服务。我宁愿并行执行此操作,因为它们彼此独立,同时我也不想使用该服务。我想节制协程(某种背压)
我知道我可以将请求批处理为可接受的并发请求数。但是,我认为那太样板了。有没有http库以惯用的方式处理
答案 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