日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java秒杀时间与服务器时间_Javascript实现秒杀倒计时(时间与服务器时间同步)...

發(fā)布時(shí)間:2023/12/1 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java秒杀时间与服务器时间_Javascript实现秒杀倒计时(时间与服务器时间同步)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

現(xiàn)在有很多網(wǎng)站都在做秒殺商品,而這其中有一個(gè)很重要的環(huán)節(jié)就是倒計(jì)時(shí)。

關(guān)于倒計(jì)時(shí),有下面幾點(diǎn)需要注意:

1.應(yīng)該使用服務(wù)器時(shí)間而不是本地時(shí)間(本地時(shí)間存在時(shí)區(qū)不同、用戶自行設(shè)置等問(wèn)題)。

2.要考慮網(wǎng)絡(luò)傳輸?shù)暮臅r(shí)。

3.獲取時(shí)間時(shí)可直接從AJAX的響應(yīng)頭中讀取(通過(guò)getResponseHeader('Date')來(lái)獲得),服務(wù)器端不需要專門寫時(shí)間生成腳本。

過(guò)程分析:

1.從服務(wù)器讀到一個(gè)時(shí)間戳之后便開始計(jì)時(shí),不考慮網(wǎng)絡(luò)傳輸?shù)暮臅r(shí):

圖中的各項(xiàng)標(biāo)注分別是(上面的時(shí)間線采用標(biāo)準(zhǔn)時(shí)間,與服務(wù)器和頁(yè)面的時(shí)間均無(wú)關(guān)):

start——頁(yè)面項(xiàng)服務(wù)器發(fā)起AJAX請(qǐng)求時(shí)的時(shí)間。

www_start——服務(wù)器響應(yīng)頁(yè)面的請(qǐng)求并返回時(shí)間戳給頁(yè)面的時(shí)間。

pc_start——頁(yè)面接受到服務(wù)器返回的時(shí)間戳并開始計(jì)時(shí)的時(shí)間。

www_end——服務(wù)器倒計(jì)時(shí)結(jié)束的時(shí)間。

pc_end——頁(yè)面倒計(jì)時(shí)結(jié)束的時(shí)間,同時(shí)也是用戶在倒計(jì)時(shí)結(jié)束那一刻點(diǎn)擊按鈕的時(shí)間。

end——服務(wù)器接收到用戶點(diǎn)擊信息的時(shí)間。

可以看出,即使在倒計(jì)時(shí)結(jié)束的那一刻(也就是秒殺開始那一刻)用戶就立即點(diǎn)擊鼠標(biāo),也會(huì)比實(shí)際開始搶拍的時(shí)間(www_end,即服務(wù)器

倒計(jì)時(shí)結(jié)束的時(shí)間)晚一些(可以很容易的看出,這個(gè)時(shí)間差正好等于pc_start - start,也就是AJAX從開始發(fā)送到接收到響應(yīng)信息的耗

時(shí))。如果有些內(nèi)行在頁(yè)面倒計(jì)時(shí)結(jié)束前用腳本發(fā)送請(qǐng)求,那么其他用戶可就虧大了。所以,我們要解決掉這個(gè)時(shí)間誤差的問(wèn)題。

2.為了解決時(shí)間誤差的問(wèn)題,我們將把頁(yè)面倒計(jì)時(shí)的時(shí)間縮短一小截(由上面的分析可以得出,這一小截正好等于pc_start - start),使得

用戶在倒計(jì)時(shí)結(jié)束時(shí)發(fā)送給服務(wù)器的搶拍信息正好在服務(wù)器倒計(jì)時(shí)結(jié)束時(shí)被接收到:

圖中的各項(xiàng)標(biāo)注與Pic.1中相同(時(shí)間線采用標(biāo)準(zhǔn)時(shí)間,與服務(wù)器和頁(yè)面的時(shí)間均無(wú)關(guān)),新增的兩項(xiàng)標(biāo)注的含義如下:

old_pc_end——在未對(duì)網(wǎng)絡(luò)傳輸耗時(shí)進(jìn)行處理的情況下pc_end的時(shí)間。

old_end——在未對(duì)網(wǎng)絡(luò)傳輸耗時(shí)進(jìn)行處理的情況下end的時(shí)間。

由Pic.2可見,網(wǎng)絡(luò)傳輸耗時(shí)造成的時(shí)間誤差已經(jīng)完全被彌補(bǔ)了,彌補(bǔ)的方法是“將倒計(jì)時(shí)結(jié)束的時(shí)間提前pc_start - start”。但是解決了網(wǎng)絡(luò)傳

輸耗時(shí)造成的誤差問(wèn)題,還有用戶電腦時(shí)間和服務(wù)器時(shí)間不相同的問(wèn)題,下面我們繼續(xù)討論。

3.用戶的電腦時(shí)間和服務(wù)器時(shí)間一定是有差異的,甚至差幾個(gè)時(shí)區(qū),怎么解決這個(gè)問(wèn)題呢?方法的要點(diǎn)如下:

A. 當(dāng)頁(yè)面接收到服務(wù)器返回的時(shí)間戳www_t時(shí),立即開始計(jì)時(shí)。

B. 當(dāng)頁(yè)面接收到服務(wù)器返回的時(shí)間戳www_t時(shí),立即計(jì)算本地時(shí)間和服務(wù)器返回的時(shí)間戳的時(shí)間差t=new Date().getTime() - www_t*1000。

C. 仍然使用new Date().getTime()來(lái)計(jì)時(shí),而不是使用setInterval()函數(shù)(計(jì)時(shí)器很不穩(wěn)定,誤差也很大),但時(shí)間的顯示與程序的邏輯必須

基于本地時(shí)間和上一步(B中)求得的時(shí)間偏差t。

結(jié)論要點(diǎn):

頁(yè)面從接收到服務(wù)器響應(yīng)的時(shí)間戳開始計(jì)時(shí),計(jì)時(shí)的時(shí)長(zhǎng)應(yīng)減掉AJAX從發(fā)送到接收整個(gè)過(guò)程的耗時(shí),計(jì)時(shí)過(guò)程則使用本地時(shí)間來(lái)實(shí)現(xiàn)(本

地時(shí)間+時(shí)間偏差)。

有任何疑問(wèn)或建議請(qǐng)留言,謝謝!

總結(jié)

以上是生活随笔為你收集整理的java秒杀时间与服务器时间_Javascript实现秒杀倒计时(时间与服务器时间同步)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。