手机倒计时与服务器时间不一致问题的解决过程

发现问题到解决问题的经过是这样的。

距离下班还剩一个小时了...

突然来了一个新需求,客户因为场地售卖火爆需要排队抢购,所以客户约定每天早上七点开始预订下一周当天的场地。这就涉及到整点预订的问题,为了优化用户体验,我们约定提前十分钟开始倒计时,让顾客能感受运动产品的动感,也让产品朝着“好玩”进发。

一接到这个需求,这个简单呀,应该可以赶上下班时间,顿时思路如涌泉:
顾客一打开页面,立马请求接口获取场地售卖时间,拿到时间后结合手机时间做比较,是否到了可售卖时间,是否过了可售卖的截至时间;如果未到可售卖时间那是否到了10分钟的倒计时时间。
假设到了倒计时时间,我们开始倒数,到了可售卖时间再次调用接口刷新页面即可实现倒计时抢场地效果。
至此,一顿猛虎操作,开发、上测试,没问题刚好到点,下班走起。

刚走到地铁站,测试发来一条信息:“你这也叫做完了没问题,赶紧给我回来。”
内心一惊,测试过的会有问题,赶紧往回走?

回到公司测试说正常流程是没有问题,但是一旦息屏了一会或者切换到其它应用去了一段时间返回应用,就会出现倒计时不准确问题。这就纳闷了,都是常规代码问题肯定是出现在倒计时上了。细细回想了一下倒计时的机制,倒计时本身是没有问题的,通过事件循环 + 观察者实现,同时切换应用后倒计时页面也不存在CPU被别的I/O占用的情况;诶,不对,js在一个单线程上执行,切换应用一段时间后这个线程虽然没被销毁,但是会不会被挂起来了呢,一但挂起那倒计时肯定是要走不准的了。

这就是问题的关键所在了,不能继续沿用倒计时自减的方案了。脑子灵光一闪,那就每次倒计时都去读取手机时间,这样就能确保倒计时准确无误了。哈哈,聪明。

一顿操作...回家。

上线运行了一天,第二天得到反馈,有的倒计时不准确(快或者慢的都有),有的倒计时结束后场地状态没有刷新。居然还有问题,启动bug分析模式...针对问题一倒计时不准确,倒计时来自于手机事件计算出啦的,那就是手机时间存在误差了;问题二场地状态为更新,有可能是前端倒计时结束,但是后端并未到达临界时间,这时场地状态肯定是不会更新的。针对这两个问题,该怎么解决呢;

哦,手机时间一般来自网络时间,但是手机时间是可以手动更改的,也就是说手机的时间是不可靠的,那时间就必须来自于服务器了。但是倒计时来自于服务器,那是不是每过一秒都要去请求一次服务器接口呢,这显然是不可取的,宁愿时间不准也不能让服务器崩溃了。既要确保到点能刷出新的场地状态(这个时间一定来自于服务器)又要确保第一次的问题不会出现,那只能想办法结合两种时间了。

又一个初步的想法出来了,一打开页面即请求服务器时间,然后通过某种映射让它和手机时间绑定,这样就可以解决这两个问题了。这个映射是什么呢?脑子有点想不清楚了。

那就笔墨伺候。

纸上画着逻辑关系图,一个条件一个条件的罗列出来,咦,好像有那么点感觉了。
倒计时的截止时间是手机当前时间、倒计时剩余时间共同决定的,手机时间好办,倒计时剩余时间 = 到点售卖时间 - 获取的服务器时间。咦,好像问题难点解决了,后面的就是条件判断 + 循环了。

截止,问题好像改完了,基本能满足倒计时结束场地状态会更新也不会出现息屏后倒计时不准确的问题。

又继续想了一下会不会还存在什么隐藏的bug呢,这个需求好像没有看到的这么简单。

后面百度了一下,看到很多类似的文章,大意了大意了。还有服务器的响应时间,setTimeout的精度问题。

这时我脑海里想到了抢茅台和12306抢票。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容