如何在rxjava中进行API速率限制服务器调用并进行改造?

时间:2017-03-27 03:12:58

标签: android retrofit rx-java

我希望能够将我对服务器的呼叫限制为每秒20次。否则服务器会将我的IP列入黑名单。

如何使用rxjava和retrofit实现这一目标?有一个简单的功能吗?

否则我怎么能告诉观察者在拨打服务器电话之前等待n秒?

2 个答案:

答案 0 :(得分:2)

如果您使用的是2.x,则可以使用spanout运算符执行此操作。对于1.x,您可以执行flatMap计时器和maxConcurrency = 1:

Observable<Observable<Result>> tasks = ...

tasks.flatMap(o ->
    Observable.timer(100, TimeUnit.MILLISECONDS)
    .flatMap(u -> o)
, 1)
.subscribe(...)

答案 1 :(得分:1)

您可以使用RFC7231来延迟它。

以下是一个例子:

Observable.timer(500, TimeUnit.MILLISECONDS)
                .map(aLong -> null) // this will be called after 500 milli seconds
                .subscribe();

TimeUnit可以是从微秒到天的任何东西,因此它非常方便。还有其他运营商也喜欢RFC7230

示例:

Observable.empty()
                .delay(500, TimeUnit.MILLISECONDS)
                .flatMap(new Function<Object, ObservableSource<?>>() {
                    @Override
                    public ObservableSource<?> apply(Object o) throws Exception {
                        return null;
                    }
                })
                .subscribe();