2015-06-27 73 views
4

在這裏,我正在開發一個帶有java套接字的項目,並且在服務器和客戶端之間執行正確的時間同步時遇到問題。 我會用一個簡單的例子來說明問題:在客戶端/服務器java套接字之間同步時間

服務器運行在格林尼治標準時間,並保持與各個項目的數據庫。其中一些商品是特價商品,但這些商品在到期前有時間限制。
因此,讓我們說,服務器時間現在9:00 AM(北京時間)並沒有在10:00(GMT)結束要約項。

客戶可以在比服務器不同的時間和時區。所以我們可以說,現在客戶端時間是8:00 AM(GMT-1),我走的時候,把它調整到客戶的時區,並發現它在1小時內結束於9:00 AM(GMT-1)即。

問題:如何計算用戶設置了自定義時間的剩餘時間。
例如,在上述客戶端設置手動的時鐘超前半小時,即8:30 AM(GMT-1)。如果您只是進行時區轉換,那麼該項目仍將以9:00(GMT-1)結束,因此要約完成的時間不正確(30分鐘)。

有人可能會說,一個可能的解決方案是設置客戶端問秒時從服務器,而不是確切日期結束的時間。但是我想在客戶端實現類似秒數的倒計時。 (如果報價在60秒內結束,則界面將變爲60,59,58,...,1,0)。因此,向服務器發送請求每秒以獲得剩下的時間不是網絡高效的。

還有一件讓我擔心的事情是,如果您確實要求「時間離開秒」的情況,那麼在慢速網絡上服務器的響應不會立即發生,所以當客戶端收到結果已經關閉了。

+0

在測量一個基本原則是:如果絕對值是不準確的(甚至是未知的),用相對值,在這種情況下,這將是一次差異。 – alk

回答

1

最簡單的方法是根本不使用客戶端時間,因爲它是不可靠的。

只需定期詢問服務器時間。你不必做的每一個第二,但重要的事情發生了,而之前(命令作出)

+0

這將如何幫助我在不使用客戶時間的情況下進行倒計時?我的意思是我需要找到一種方法來保持偏移量,以查看請求後已經過了多長時間 – javasuns

+0

只需發送訂單到期前剩餘的秒數而不是發送時間 – WeMakeSoftware

+0

但是這並不能解決慢速網絡的問題 – javasuns

0

可以使用NTP協議。在服務器/客戶端之間同步。

NTP標準使用GMT作爲時間參考,並取決於您選擇最近的ntp池的位置。

取決於你在世界NIST這裏(美國)實現NTP

NTP實際使用分層服務器與時間源「銫鐘」,具有納秒的誤差率。在GPS,貨幣交易中使用,而且很可能在您的計算機(如果它是類Unix)

相關問題