我正在使用 RxJS5 ( https://github.com/ReactiveX/RxJS ) 并且我正在尝试访问 Riot API,该 API 的上限率为每 10 分钟 500 个请求和每 10 秒 10 个请求。
我设置了一个请求对象流,我有一个订阅者准备好获取它们并实际请求它们,但我在 RxJS 有点新,不确定我应该使用哪个运算符来限制请求。
我正在使用 RxJS5 ( https://github.com/ReactiveX/RxJS ) 并且我正在尝试访问 Riot API,该 API 的上限率为每 10 分钟 500 个请求和每 10 秒 10 个请求。
我设置了一个请求对象流,我有一个订阅者准备好获取它们并实际请求它们,但我在 RxJS 有点新,不确定我应该使用哪个运算符来限制请求。
如果你想平衡你的请求,你可以使用 sample:
const newRequests = requestStream.sample(Observable.timer(75)); //10*60*60/500 = 72 --> 75 to be sure
当给定的 observable 发出时,Sample 将从 observable 发出一个元素
不确定这是否是最好的方法,但我最终使用间隔观察器压缩请求对象流,因此它只会在间隔滴答声时流式传输事件。再次,不确定这是否是最好的方法,但它有效,它看起来像这样:
raw_stream = Rx.Observable.fromEvent EventEmitter, 'event'
interval = Rx.Observable.interval(1000)
timed_events = Rx.Observable.zip interval, raw_stream
如果您有更好的方法,请随时回答。