iOS 客戶端與服務(wù)端做時(shí)間同步


需求

我們做客戶端的時(shí)候逢捺,有時(shí)會(huì)需要對(duì)客戶端與服務(wù)器的時(shí)間進(jìn)行同步筑悴,比如搶購(gòu)活動(dòng)们拙、倒計(jì)時(shí)等。這時(shí)我們要考慮如何準(zhǔn)備地與服務(wù)器的時(shí)間進(jìn)行同步阁吝,同時(shí)防止用戶本地的時(shí)間有誤差時(shí)導(dǎo)致的問題砚婆。

分析

描述

為了實(shí)現(xiàn)以上需求,我們需要:

  1. 獲取服務(wù)器某一時(shí)刻 A 的時(shí)間求摇;

  2. 記錄獲取到時(shí)刻 A 時(shí)的本地時(shí)間 B射沟;

  3. 需要用到時(shí)間時(shí),獲取當(dāng)前本地時(shí)間 C与境,當(dāng) C - B 作為時(shí)間間隔 D验夯,則 A + D 則是當(dāng)前服務(wù)器的時(shí)間。

實(shí)現(xiàn)

  1. 從上面的步驟摔刁,我們可以得到挥转,要消除用戶修改時(shí)間導(dǎo)致的影響,必須保證 BC 與系統(tǒng)時(shí)間無關(guān)共屈;

  2. iOS 中正好有提供這樣兩個(gè)接口:

  3. 獲取設(shè)備當(dāng)前時(shí)間 Now绑谣,該值受系統(tǒng)時(shí)間影響,用戶如果修改時(shí)間拗引,值也會(huì)隨著變化借宵;

  4. 獲取設(shè)備上次重啟的時(shí)間 BootTime,該值受系統(tǒng)時(shí)間影響矾削,用戶如果修改時(shí)間壤玫,值也會(huì)隨著變化;哼凯;

  5. 由上面 iOS 提供的兩個(gè)接口欲间,我們可以獲取本地時(shí)間 BC:設(shè)備自上次重啟后運(yùn)行的時(shí)間(BootTime - Now)断部,該值與系統(tǒng)時(shí)間無關(guān)猎贴;

代碼實(shí)現(xiàn)

獲取當(dāng)前 Unix Time:

    static func now() -> Int {
        var now =  timeval()
        var tz = timezone()
        gettimeofday(&now, &tz)
        return now.tv_sec
    }

獲取設(shè)備上次重啟的 Unix Time:

    func boottime() -> Int {
        
        var mid = [CTL_KERN, KERN_BOOTTIME]
        var boottime = timeval()
        var size = MemoryLayout.size(ofValue: boottime)
        
        if sysctl(&mid, 2, &boottime, &size, nil, 0) != -1 {
            return boottime.tv_sec
        }
        return 0
    }

時(shí)間校準(zhǔn):

// 接口獲取服務(wù)器時(shí)間處理
let serverTime = xxx                        // 獲取到的服務(wù)器時(shí)間
let runTime0 = now() - boottime()           // 當(dāng)前設(shè)備運(yùn)行時(shí)間

// 需要用到時(shí)間時(shí)
let runTime1 = now() - boottime()           // 當(dāng)前時(shí)刻設(shè)備運(yùn)行時(shí)間
let currentTime = serverTime + (runTime1 - runTime0)    // 當(dāng)前服務(wù)器時(shí)間

參考

iOS關(guān)于時(shí)間的處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蝴光,隨后出現(xiàn)的幾起案子她渴,更是在濱河造成了極大的恐慌,老刑警劉巖虱疏,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惹骂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡做瞪,警方通過查閱死者的電腦和手機(jī)对粪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門右冻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人著拭,你說我怎么就攤上這事纱扭。” “怎么了儡遮?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵乳蛾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我鄙币,道長(zhǎng)肃叶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任十嘿,我火速辦了婚禮因惭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绩衷。我一直安慰自己蹦魔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布咳燕。 她就那樣靜靜地躺著勿决,像睡著了一般。 火紅的嫁衣襯著肌膚如雪招盲。 梳的紋絲不亂的頭發(fā)上低缩,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音曹货,去河邊找鬼表制。 笑死,一個(gè)胖子當(dāng)著我的面吹牛控乾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娜遵,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼蜕衡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了设拟?” 一聲冷哼從身側(cè)響起慨仿,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纳胧,沒想到半個(gè)月后镰吆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跑慕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年万皿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了摧找。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牢硅,死狀恐怖蹬耘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情减余,我是刑警寧澤综苔,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站位岔,受9級(jí)特大地震影響如筛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抒抬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一杨刨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瞧剖,春花似錦拭嫁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捉撮,卻和暖如春怕品,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巾遭。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工肉康, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灼舍。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓吼和,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親骑素。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炫乓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件献丑、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,033評(píng)論 4 62
  • 風(fēng)有情 行萬余里 吹醒萬物 不問歸期 雨有情 飄浮不定 滋養(yǎng)大地 不計(jì)流失 只是 狂風(fēng)暴雨 不知何需 強(qiáng)大蠻橫 如...
    大清晨的小太陽閱讀 150評(píng)論 0 1
  • (1) 接到媽媽的電話是下午四點(diǎn)多末捣。 我剛剛結(jié)束一場(chǎng)培訓(xùn),整個(gè)過程氣氛很好创橄,臨場(chǎng)加入潛能激發(fā)的視頻箩做,恰到好處地濕潤(rùn)...
    若聆閱讀 1,160評(píng)論 16 21
  • 本文系半撇私塾新媒體創(chuàng)意寫作項(xiàng)目里程碑作品一。 1圃酵、 小時(shí)候,媽媽總是喜歡一邊做事情的時(shí)候一邊跟我解釋這件事情是怎...
    桃花島主sue閱讀 207評(píng)論 1 0