我的答案有點一般,取決於你想要做什麼。
首先,你需要考慮到服務器和客戶端沒有相同的時間,客戶端甚至可能沒有正確的日期,所以所有的JavaScript時間戳應該保存在不同的相對點。
使用AJAX爲每個請求可能會更容易爲你(你可以很容易收集有關連接數據)
估計服務器時間
這裏的主要問題是互聯網連接,或者如果服務器做一些繁重的工作,服務器執行時間。
通過向服務器發出正常請求並確定請求服務的時間,您可以測量「ping」服務器的時間。
var start = new Date().getTime();
// Make the request
var ping_time = new Date().getTime() - start;
請求大約需要ping_time/2
由服務器和ping_time/2
客戶端獲得響應來servered。
您也可以使服務器以此時間戳的時間響應此請求(由於內容較小,因此ajax中的時間戳記更快)。爲了能夠找到服務器時間。
var start = new Date().getTime();
// Make the request
var serverTime = request_responce;
var ping_time = new Date().getTime() - start;
// Estimate server's time
server_time_now = serverTime + (ping_time/2);
爲了能夠估計在未來的服務器時,你還可以保存與server_time_now
的client_time_now = new Date().getTime()
。 並做一個函數來計算差異。
function getServerTimeEstimation(){
return server_time_now + (new Date().getTime() - client_time_now);
}
現在你有服務器時間的估計,也可以重拍服務器時間估計和檢查,如果你有差不多的估計(只是爲了檢查是否估計是正確的)。
估算平
的另一個問題是,在很短的時間時間戳你可以使用MS固定數量或使用ping的估計。通過使用固定數量的ms(例如5 * 1000 = 5秒),如果用戶連接速度較慢,則可能會出現問題。
// Short time timestamp
stt = getServerTimeEstimation() + (5*1000)
如果您使用前。 5 *平可能會更好,但你需要保持跟蹤平
// Short time timestamp
stt = getServerTimeEstimation() + (5*ping)
所以你可能需要做的是測量互ping時間和不斷更新它一個Ajax調用。
// Measure new ping
new_ping = ...;
// Adjust ping a little
ping = ping * 0.7 + new_ping * 0.3;
謝謝,我想到了雙方的時間差異,但令人驚訝的不是關於發送ping只是爲了。在接受答案之前,我稍等一會兒,但它有幫助。更確切地說,這涉及到兩個不同的項目,其中一個我想製作一個「實時轉向」的遊戲,以適應轉彎時間來加速連接。對於第二個是工作和更復雜,我可能無法實現,因爲connexion是不穩定的..我會更新。 Thx再次! – Kaddath