我希望能够将我对服务器的呼叫限制为每秒20次。否则服务器会将我的IP列入黑名单。
如何使用rxjava和retrofit实现这一目标?有一个简单的功能吗?
否则我怎么能告诉观察者在拨打服务器电话之前等待n秒?
答案 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();