手機倒計時與服務器時間不一致問題的解決過程

發(fā)現(xiàn)問題到解決問題的經(jīng)過是這樣的。

距離下班還剩一個小時了...

突然來了一個新需求蕴侧,客戶因為場地售賣火爆需要排隊搶購禽最,所以客戶約定每天早上七點開始預訂下一周當天的場地。這就涉及到整點預訂的問題泳赋,為了優(yōu)化用戶體驗,我們約定提前十分鐘開始倒計時喇喉,讓顧客能感受運動產(chǎn)品的動感祖今,也讓產(chǎn)品朝著“好玩”進發(fā)。

一接到這個需求拣技,這個簡單呀千诬,應該可以趕上下班時間,頓時思路如涌泉:
顧客一打開頁面膏斤,立馬請求接口獲取場地售賣時間徐绑,拿到時間后結(jié)合手機時間做比較,是否到了可售賣時間莫辨,是否過了可售賣的截至時間傲茄;如果未到可售賣時間那是否到了10分鐘的倒計時時間毅访。
假設到了倒計時時間,我們開始倒數(shù)盘榨,到了可售賣時間再次調(diào)用接口刷新頁面即可實現(xiàn)倒計時搶場地效果喻粹。
至此,一頓猛虎操作草巡,開發(fā)守呜、上測試,沒問題剛好到點山憨,下班走起查乒。

剛走到地鐵站,測試發(fā)來一條信息:“你這也叫做完了沒問題郁竟,趕緊給我回來侣颂。”
內(nèi)心一驚枪孩,測試過的會有問題憔晒,趕緊往回走?

回到公司測試說正常流程是沒有問題蔑舞,但是一旦息屏了一會或者切換到其它應用去了一段時間返回應用拒担,就會出現(xiàn)倒計時不準確問題。這就納悶了攻询,都是常規(guī)代碼問題肯定是出現(xiàn)在倒計時上了从撼。細細回想了一下倒計時的機制,倒計時本身是沒有問題的钧栖,通過事件循環(huán) + 觀察者實現(xiàn)低零,同時切換應用后倒計時頁面也不存在CPU被別的I/O占用的情況;誒拯杠,不對掏婶,js在一個單線程上執(zhí)行,切換應用一段時間后這個線程雖然沒被銷毀潭陪,但是會不會被掛起來了呢雄妥,一但掛起那倒計時肯定是要走不準的了。

這就是問題的關鍵所在了依溯,不能繼續(xù)沿用倒計時自減的方案了老厌。腦子靈光一閃,那就每次倒計時都去讀取手機時間黎炉,這樣就能確保倒計時準確無誤了枝秤。哈哈,聰明慷嗜。

一頓操作...回家淀弹。

上線運行了一天丹壕,第二天得到反饋,有的倒計時不準確(快或者慢的都有)垦页,有的倒計時結(jié)束后場地狀態(tài)沒有刷新雀费。居然還有問題干奢,啟動bug分析模式...針對問題一倒計時不準確痊焊,倒計時來自于手機事件計算出啦的,那就是手機時間存在誤差了忿峻;問題二場地狀態(tài)為更新薄啥,有可能是前端倒計時結(jié)束,但是后端并未到達臨界時間逛尚,這時場地狀態(tài)肯定是不會更新的垄惧。針對這兩個問題,該怎么解決呢绰寞;

哦到逊,手機時間一般來自網(wǎng)絡時間,但是手機時間是可以手動更改的滤钱,也就是說手機的時間是不可靠的觉壶,那時間就必須來自于服務器了。但是倒計時來自于服務器件缸,那是不是每過一秒都要去請求一次服務器接口呢铜靶,這顯然是不可取的,寧愿時間不準也不能讓服務器崩潰了他炊。既要確保到點能刷出新的場地狀態(tài)(這個時間一定來自于服務器)又要確保第一次的問題不會出現(xiàn)争剿,那只能想辦法結(jié)合兩種時間了。

又一個初步的想法出來了痊末,一打開頁面即請求服務器時間蚕苇,然后通過某種映射讓它和手機時間綁定,這樣就可以解決這兩個問題了凿叠。這個映射是什么呢捆蜀?腦子有點想不清楚了。

那就筆墨伺候幔嫂。

紙上畫著邏輯關系圖辆它,一個條件一個條件的羅列出來,咦履恩,好像有那么點感覺了锰茉。
倒計時的截止時間是手機當前時間、倒計時剩余時間共同決定的切心,手機時間好辦飒筑,倒計時剩余時間 = 到點售賣時間 - 獲取的服務器時間片吊。咦,好像問題難點解決了协屡,后面的就是條件判斷 + 循環(huán)了俏脊。

截止,問題好像改完了肤晓,基本能滿足倒計時結(jié)束場地狀態(tài)會更新也不會出現(xiàn)息屏后倒計時不準確的問題爷贫。

又繼續(xù)想了一下會不會還存在什么隱藏的bug呢,這個需求好像沒有看到的這么簡單补憾。

后面百度了一下漫萄,看到很多類似的文章,大意了大意了。還有服務器的響應時間,setTimeout的精度問題岳链。

這時我腦海里想到了搶茅臺和12306搶票。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岩瘦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子窿撬,更是在濱河造成了極大的恐慌启昧,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尤仍,死亡現(xiàn)場離奇詭異箫津,居然都是意外死亡,警方通過查閱死者的電腦和手機宰啦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門苏遥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赡模,你說我怎么就攤上這事田炭。” “怎么了漓柑?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵教硫,是天一觀的道長。 經(jīng)常有香客問我辆布,道長瞬矩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任锋玲,我火速辦了婚禮景用,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惭蹂。我一直安慰自己伞插,他們只是感情好割粮,可當我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著媚污,像睡著了一般舀瓢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耗美,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天京髓,我揣著相機與錄音,去河邊找鬼幽歼。 笑死朵锣,一個胖子當著我的面吹牛谬盐,可吹牛的內(nèi)容都是我干的甸私。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼飞傀,長吁一口氣:“原來是場噩夢啊……” “哼皇型!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起砸烦,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤弃鸦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后幢痘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唬格,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年颜说,在試婚紗的時候發(fā)現(xiàn)自己被綠了购岗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡门粪,死狀恐怖喊积,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玄妈,我是刑警寧澤乾吻,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站拟蜻,受9級特大地震影響绎签,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酝锅,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一诡必、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屈张,春花似錦擒权、人聲如沸袱巨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愉老。三九已至,卻和暖如春剖效,著一層夾襖步出監(jiān)牢的瞬間嫉入,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工璧尸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咒林,地道東北人。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓爷光,卻偏偏與公主長得像垫竞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛀序,可洞房花燭夜當晚...
    茶點故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內(nèi)容