先来抛出需求:商家接收的客户发出的订单肯定是越快越好,大家普遍认为推送是最好的选择,然而真正现实场景中,在消费高峰期(晚上聚餐去人最多的餐厅吃饭),推送的延时性是让商家最不可忍受的,当然,可能跟我们接入的免费版的SDK有关,收费版的我们公司没有使用过,如果你们使用过收费版的,麻烦评论区告知我们收费版的会不会存在延时,丢推送这些无法忍受的问题。

所以我们后来用轮训和推送同时使用,然后做一个过滤,谁先到就优先处理,其余的过滤掉,刚开始接入轮训的时候肯定是要确定一个让商家能忍受的时间来获取订单,于是就有了每10秒一次请求一次订单,在商用一段时间后,抱怨比之前少了很多。但是还是有些商家不满意,消费人群特别多的商家,如果每个人等10秒,总会有些不满意的声音。

于是,新的需求就如期而来了。。。闲时每10秒轮训一次,高峰期每5秒轮训一次,过了高峰期又恢复到10秒轮训一次。

怎么感觉在写小说呢?我都看不下去了,密密麻麻的。。。

针对:闲时–每10秒轮训一次,忙时–每5秒轮训一次

我们用一个效果来模拟这个场景:
**0—30秒:每10秒一次
31—60秒:每5秒一次**

轮训用Rxjava的interval()来实现,效果:

代码如下:

package com.ishangbin.shop.ui;import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;import com.ishangbin.shop.ui.act.util.LogUtil;import java.util.Calendar;
import java.util.concurrent.TimeUnit;import rx.Observable;
import rx.Observer;
import rx.Subscription;/*** Created by zhouhui on 2017/12/28.*/public class TestActivity extends AppCompatActivity {/*** 5秒轮训*/private ObserverShort mShortObserver;private Observable<Long> mObservableOrderPollingShort;private Subscription mSubscriptionOrderPollingShort;/*** 10秒轮训*/private ObserverLong mObserverLong;private Observable<Long> mObservableOrderPollingLong;private Subscription mSubscriptionOrderPollingLong;@Overridepublic void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {super.onCreate(savedInstanceState, persistentState);// 参数说明:// 参数1 = 第1次延迟时间;// 参数2 = 间隔时间数字;// 参数3 = 时间单位;// Observable.interval(5, 5, TimeUnit.SECONDS)mShortObserver = new ObserverShort();mObservableOrderPollingShort = Observable.interval(5, 5, TimeUnit.SECONDS);mObserverLong = new ObserverLong();mObservableOrderPollingLong = Observable.interval(10, 10, TimeUnit.SECONDS);initLongPolling();}@Overridepublic void onDestroy() {if (mSubscriptionOrderPollingShort != null && mSubscriptionOrderPollingShort.isUnsubscribed()) {mSubscriptionOrderPollingShort.unsubscribe();}if (mSubscriptionOrderPollingLong != null && mSubscriptionOrderPollingLong.isUnsubscribed()) {mSubscriptionOrderPollingLong.unsubscribe();}super.onDestroy();}/*** 短轮训*/private void initShortPolling() {mSubscriptionOrderPollingShort = mObservableOrderPollingShort.subscribe(mShortObserver);}/*** 长轮训*/private void initLongPolling() {mSubscriptionOrderPollingLong = mObservableOrderPollingLong.subscribe(mObserverLong);}/*** 短轮训的回调*/public class ObserverShort implements Observer<Long> {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable throwable) {}@Overridepublic void onNext(Long aLong) {Calendar curDateTime = Calendar.getInstance();curDateTime.setTimeInMillis(System.currentTimeMillis());int year = curDateTime.get(Calendar.YEAR);int month = curDateTime.get(Calendar.MONTH);int day = curDateTime.get(Calendar.DAY_OF_MONTH);int hour = curDateTime.get(Calendar.HOUR_OF_DAY);int minute = curDateTime.get(Calendar.MINUTE);int second = curDateTime.get(Calendar.SECOND);LogUtil.i("OrderPollingService---未打印订单的轮训(短)---" + second);if (second < 30) {mSubscriptionOrderPollingShort.unsubscribe();initLongPolling();}}}/*** 长轮训的回调*/public class ObserverLong implements Observer<Long> {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable throwable) {}@Overridepublic void onNext(Long aLong) {Calendar curDateTime = Calendar.getInstance();curDateTime.setTimeInMillis(System.currentTimeMillis());int second = curDateTime.get(Calendar.SECOND);LogUtil.i("OrderPollingService---未打印订单的轮训(长)---" + second);if (second >= 30) {mSubscriptionOrderPollingLong.unsubscribe();initShortPolling();}}}
}

Rxjava实现10秒轮训和5秒轮训的交替使用相关推荐

  1. 获取某一帧、某一秒、某几秒画面

    文章目录 前言 一.某一帧 二.某一秒 三.某几秒 总结 前言 有时,我们在看一段视频时,又好看的画面,可以当作桌面背景,或者是喜欢的明星,好看的美女姐姐等,我们都可以通过程序实现截取 说明: 1.某 ...

  2. android扫雷计时器,扫雷纪录:高级31秒,中级7秒,初级0.49秒,怎么做到的?

    原标题:扫雷纪录:高级31秒,中级7秒,初级0.49秒,怎么做到的? 大家在接触电脑的时候肯定都接触过一款叫做扫雷的游戏,这个小游戏是1981年微软设计师罗伯特·杜尔和卡特·约翰逊两位工程师设计的.很 ...

  3. 输入时间的前一秒和后一秒(c语言)

    题目: [问题描述] 从键盘输入24小时制的某个时间,计算并输出其前一秒和后一秒的时间. [输入形式] 从键盘输入24小时制的某个时间,格式为:hh:mm:ss. [输出形式] 输出2行,第1行为输入 ...

  4. python 速度 memmap_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例

    <从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例>要点: 本文介绍了从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例,希望对您有用.如果有疑问,可 ...

  5. 转 从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例

    注: 转自 微信公众号"高可用架构":从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例 导读:Python 被很多互联网系统广泛使用,但在另外一方面,它也存在一 ...

  6. shell高级脚本:“秒”转换为“时-分-秒”;ping

    "秒"转换为"时-分-秒" swap_seconds () {SEC=$1(( SEC < 60 )) && echo -e " ...

  7. 秒 毫秒 微秒 纳秒 皮秒 飞秒

    millisecond              1ms (毫秒)       1毫秒=0.001秒=10-3秒 microsecond           1μs (微秒)         1微秒= ...

  8. 开机启动win7,自动启动突出显示的选择之前的秒数有30秒

    遇到问题:重装了系统,win7开机,会"显示自动启动突出显示的选择之前的秒数有30秒":这时候的30秒显得时间太长,一般都不会愿意等. 解决问题:一开始还以为是bios里面修改设置 ...

  9. 一秒快速抠图一秒图片高清处理

    作为运营人,作为平面设计师.我们离不开与图片设计.图片处理等相关的工作.在运营工作新人中,很多新的运营专员/运营者对Ps并不是特别熟练.我们也知道除外PS还有其它非主流的抠图软件,但是大体都是描绘一个 ...

最新文章

  1. Java Volatile keyword
  2. 硬件:选购CPU和显卡需了解的参数,TDP、SDP、ACP、GCP、TBP是什么?
  3. 助力苏州、星火相传,广苏两地微软技术俱乐部交流纪实
  4. JVM运行参数_JVM内存模型_常用内存分析工具
  5. PHP 函数:intval()
  6. 如何将html转为report,如何使用XtraReport将报表导出为HTML
  7. 问题 D: 去行首行尾的空白符
  8. 查看从库mysql同步错误日志_常见MySQL同步错误恢复方法
  9. Linux中ctrl+z 和trl+c的区别以及jobs、bg、fg命令
  10. FlashFXP 5.4.0注册码
  11. mysql中explain是什么_MySQL中EXPLAIN的解释_MySQL
  12. 计算机excel怎么删除重复项,excel怎么删除重复项
  13. SQL-根据生日计算年龄
  14. Mac如何打开企业微信内置浏览器控制台
  15. 阅读笔记--现代操作系统
  16. wpf 字体模糊_WPF Effect 造成的字体模糊
  17. jQuery弹出插件thickbox使用心得
  18. word打开wps文件乱码_Word打开WPS文档成乱码怎么办
  19. App 抓包问题与解决
  20. 对于面向对象的简单理解

热门文章

  1. mysql修改登录权限设置密码_MySQL修改用户密码及权限限制设置
  2. 5款简单实用的WIN10软件推荐
  3. 计算机和智能18 【A. M. TURING】(个人翻译,欢迎指正!这篇文章就算结束啦!)
  4. 河南联合惩戒失信建设:220家政府机构因失信被整改
  5. IOS开发问题索引(四)
  6. Android仿微信底部菜单栏+今日头条顶部导航栏
  7. Java 百度AI 写一个简单的手势识别程序
  8. 解决spyder闪退问题
  9. C#使用说明官方手册
  10. 模型评估 (Model Assessment)