android - 我如何排队和延迟改造请求以避免达到 api 速率限制?

标签 android retrofit rate-limiting

我正在使用实现节流的 API。限制之一是每秒 1 个请求。啊。 我有以下立即达到极限的场景。

  • 使用 api/status 检查 api 的状态

  • 如果 api 启动了,获取用户订阅

  • 从订阅列表加载页面

有什么我可以插入改造中的东西,可以将每个网络请求排队,使其仅在最后一个之后至少运行 1000 毫秒?我正在使用/学习 rxjava,debounce 在这里有用吗?

最佳答案

您可以限制您的可观察对象。

    Observable<String> text = ...
text.throttleLast(1, SECONDS)
    .flatMap(retrofitApiCall())
    .subscribe(result -> System.out.println("result: " + result));

另一种解决方案是在您的 okhttp 构建器中设置一个调度程序,并添加一个休眠一秒钟的拦截器。这可能不是最优雅的解决方案,并且会扼杀使用异步的一些好处,因为它限制您一次只能使用一个线程。

OkHttpClient.Builder builder = new OkHttpClient.Builder();


    Dispatcher dispatcher = new Dispatcher();
    dispatcher.setMaxRequests(1);

    Interceptor interceptor = new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            SystemClock.sleep(1000);
            return chain.proceed(chain.request());
        }
    };

    builder.addNetworkInterceptor(interceptor);
    builder.dispatcher(dispatcher);
    builder.build();

关于android - 我如何排队和延迟改造请求以避免达到 api 速率限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309103/

相关文章:

android - 使用 UrlEncoded 对象改造

python - aiohttp:按域限制每秒请求数

android - 按照指南制作相机应用程序,出现错误。安卓SDK

android - 多部分改造 1.9 -> 2

android - 为 fragment 再次创建 ViewModel

kotlin - 在有改造的条件下,在 URL 的路径中添加一个参数

python - 限制/限制 GRequests 中 HTTP 请求的速率

akka - 如何限制 Akka Stream 每秒只执行和发送一条消息?

java - 加密文件或字符串安全 android

java - 从另一个类调用时更改 TextView 的函数不起作用