节流或限制 Kotlin CoRoutine 计数
Throttle or Limit Kotlin CoRoutine count
我正在尝试从我的协程中访问一个 http 服务。我可能不得不点击该服务一百万次。我更喜欢并行执行,因为它们彼此独立,同时我不想 DOS 该服务。我想限制我的协程(某种背压)
我知道我可以将请求批处理到可接受的并发请求数。但是,我认为那太样板了。是否有任何 http 库以惯用的方式处理此问题
选项 1:
OK HTTP
和 retrofit
可以限制请求数:
Dispatcher dispatcher = new Dispatcher();
dispatcher.setMaxRequests(100);
dispatcher.setMaxRequestsPerHost(10);
OkHttpClient client = new OkHttpClient.Builder()
.dispatcher(dispatcher)
.build();
您可以在此处查看示例:
协程有一个适配器:https://github.com/JakeWharton/retrofit2-kotlin-coroutines-adapter
所以两者一起会给你你所需要的。
选项 2:
将 Retrofit 与 AsyncHttpClient
一起使用,它也有一个适配器:https://github.com/AsyncHttpClient/async-http-client/tree/master/extras/retrofit2
然后像这样限制资源:
AsyncHttpClient http = asyncHttpClient(config()
.setMaxConnections(500)
.setMaxConnectionsPerHost(200)
.setPooledConnectionIdleTimeout(100)
.setConnectionTtl(500)
);
该示例来自维基: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
我正在尝试从我的协程中访问一个 http 服务。我可能不得不点击该服务一百万次。我更喜欢并行执行,因为它们彼此独立,同时我不想 DOS 该服务。我想限制我的协程(某种背压)
我知道我可以将请求批处理到可接受的并发请求数。但是,我认为那太样板了。是否有任何 http 库以惯用的方式处理此问题
选项 1:
OK HTTP
和 retrofit
可以限制请求数:
Dispatcher dispatcher = new Dispatcher();
dispatcher.setMaxRequests(100);
dispatcher.setMaxRequestsPerHost(10);
OkHttpClient client = new OkHttpClient.Builder()
.dispatcher(dispatcher)
.build();
您可以在此处查看示例:
协程有一个适配器:https://github.com/JakeWharton/retrofit2-kotlin-coroutines-adapter
所以两者一起会给你你所需要的。
选项 2:
将 Retrofit 与 AsyncHttpClient
一起使用,它也有一个适配器:https://github.com/AsyncHttpClient/async-http-client/tree/master/extras/retrofit2
然后像这样限制资源:
AsyncHttpClient http = asyncHttpClient(config()
.setMaxConnections(500)
.setMaxConnectionsPerHost(200)
.setPooledConnectionIdleTimeout(100)
.setConnectionTtl(500)
);
该示例来自维基: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