2017-02-07 63 views
0

我想計算JavaScript客戶端和應用程序請求的任何服務器(可以是本地的,但也是遠程的)之間的差異,以相當精確的方式(一秒的順序)。目標是能夠提供短期到期郵票。我可以考慮請求時間來獲得JS客戶端和服務器之間的時差嗎?

我可以同時獲得這兩個時間,也可以在HTML頁面中注入服務器時間戳以獲取參考以進行比較。

但是,是否有一種簡單的方法可以考慮客戶端到達服務器所需的時間,然後返回,以便時差可以準確?有興趣知道,如果你有理由不使用這種方式做事..

如果答案是一種使用變量來計算的方法,你可以保持你的解釋簡單,只是說明變量,沒有用的寫所有的代碼。

Thx。

回答

1

我的答案有點一般,取決於你想要做什麼。

首先,你需要考慮到服務器和客戶端沒有相同的時間,客戶端甚至可能沒有正確的日期,所以所有的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_nowclient_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; 
+0

謝謝,我想到了雙方的時間差異,但令人驚訝的不是關於發送ping只是爲了。在接受答案之前,我稍等一會兒,但它有幫助。更確切地說,這涉及到兩個不同的項目,其中一個我想製作一個「實時轉向」的遊戲,以適應轉彎時間來加速連接。對於第二個是工作和更復雜,我可能無法實現,因爲connexion是不穩定的..我會更新。 Thx再次! – Kaddath

相關問題