【发布时间】:2016-04-10 06:32:42
【问题描述】:
我正在编写一个流式 Twitter 客户端,它只是将流发送到电视上。我正在使用 RxJava 观察流。
当流突然出现时,我想对其进行缓冲并减慢速度,以便每条推文至少显示 6 秒。然后在安静的时间里,任何已经建立的缓冲区都会通过拉队列头逐渐清空自己,每 6 秒发一条推文。如果有一条新推文进入并面临一个空队列(但在显示最后一条之后 > 6 秒),我希望它立即显示。
我想象流看起来像 here 描述的那样:
Raw: --oooo--------------ooooo-----oo----------------ooo|
Buffered: --o--o--o--o--------o--o--o--o--o--o--o---------o--o--o|
而且我知道那里提出的问题有解决方案。但我就是无法理解它的答案。这是我的解决方案:
myObservable
.concatMap(new Func1<Long, Observable<Long>>() {
@Override
public Observable<Long> call(Long l) {
return Observable.concat(
Observable.just(l),
Observable.<Long>empty().delay(6, TimeUnit.SECONDS)
);
}
})
.subscribe(...);
所以,我的问题是:这是不是太天真了?缓冲/背压发生在哪里?有没有更好的解决方案?
【问题讨论】: