所有Http请求的间隔(使用改造和Rx Java 2)

时间:2018-05-16 13:21:43

标签: android retrofit2 rx-java2

我正在尝试创建一个用于远程控制机器人的应用程序(无论如何,它并不重要),我遇到了一个问题,服务器端(在机器人上)太弱了处理来自智能手机的所有http请求。但我仍然可以每100-150毫秒发送一个请求。我使用Rx Java和改造来发送所有请求; 我想问的是,我可以安排所有请求并以恒定间隔发送它们吗? 我的应用程序中有basePresenter,这是发送'任何'请求服务器并检查是否已连接(并以一定间隔本身进行):

requestInterface.checkConnectionToRobot()
                .doOnError(err -> {err.printStackTrace(); action(false);})
                .retryWhen(o -> o.delay(2000, TimeUnit.MILLISECONDS))
                .repeatWhen(o -> o.delay(2000, TimeUnit.MILLISECONDS))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(next -> action(true))
                .subscribe(new DisposingObserver<ResponseBody>() {
                    @Override
                    public void onSubscribe(final Disposable d) {
                        addContinuous(d);
                    }
                });

正如您所理解的那样,这项检查必须重复进行。当我尝试再提出一个这样的请求时(例如检查机器人传感器的某些信息等),就会出现问题:

requestInterface.refreshBaseData()
                .retryWhen(o -> o.delay(1000, TimeUnit.MILLISECONDS))
                .repeatWhen(o -> o.delay(refreshRate, TimeUnit.MILLISECONDS))
                .subscribeOn(Schedulers.io())
                .map(RefreshDataConverter::convertData)
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(next -> getViewState().setBaseData(next))
                .subscribe(new DisposingObserver<RefreshData>() {
                    @Override
                    public void onSubscribe(final Disposable d) {
                        addContinuous(d);
                        baseCheckDisposable = d;
                    }
                });

请求几乎相同,它正在推迟自己。 但是当它们同时工作时,它们可以重叠,服务器可以粉碎。 我已尝试Observable.intervalSchedulers.from(Executors.newSingleThreadExecutor())

喜欢这个:

scheduler = Schedulers.from(Executors.newSingleThreadExecutor())
Observable.interval(1, TimeUnit.SECONDS)
                .flatMap(n ->
                        requestInterface.checkConnectionToRobot()
                                .subscribeOn(scheduler))
                .doOnError(err -> {err.printStackTrace(); action(false);})
                .retryWhen(o -> o.delay(2000, TimeUnit.MILLISECONDS))
                .repeatWhen(o -> o.delay(2000, TimeUnit.MILLISECONDS))
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(next -> action(true))
                .subscribe(new DisposingObserver<ResponseBody>() {
                    @Override
                    public void onSubscribe(final Disposable d) {
                        addContinuous(d);
                    }
                });

在另一个请求中也是如此,但它们仍相互重叠。 我究竟做错了什么?我只需要延迟发送我的应用程序的所有请求(也许我需要某种经理或什么?)。 附:我的代码的任何更正都是受欢迎的。:) 感谢

0 个答案:

没有答案