2014-01-27 86 views
1

我正在開發即時消息應用程序,該應用程序使用消息ID,消息內容和排序時間戳的列記錄數據庫中的每條消息。來自客戶端的時間戳

在插入到數據庫之前,我一直使用PHP的time()函數添加時間戳,但是在我看來,這可能會導致問題。如果用戶快速提交兩條或更多條消息,則服務器可能會將它們亂序處理,並將它們混淆在數據庫中。

我正在考慮使用javascript的Date.getTime()方法。這種方式的時間戳記錄了用戶提交信息的時間,而不是它處理完成的時間(希望這兩個數字不是不同)。

這帶來了兩個問題:

  • 的數據可能被操縱。我必須仍然使用PHP的time()函數,並且只在彼此在一分鐘左右時間內提交(這不是一個完美的解決方案)。
  • 我真的不知道計算機的時間如何同步。提交的時間看起來像是用戶在中國的時間是多少?

我確定這是一個始終處理的問題。那裏有什麼樣的解決方案?

+1

由於時區差異,不準確的時間同步和數據操作,您應該只能使用服務器時間。就消息順序而言,您可以簡單地發送遞增順序或順序與消息一起確定消息線程中的順序。 – joe42

回答

5

計算機時間不是很好同步 - 你的應用程序絕對不應該指望這一點。在我的腦海

合理的解決方案:

  • 客戶端使用時間戳只爲找出其中一個客戶端提交的消息序列。
  • 使用服務器時間戳一切

還要注意的是客戶端的時間戳可以在任何時區(用戶可以改變他們的時區),所以客戶端的時間真的是唯一有用的在與其他時間戳從比較同一個客戶端