簡體   English   中英

客戶端和服務器時間的差異

[英]Difference between client and server time

我想在php / javascript應用程序中使用服務器時間。 到第二個時間對於應用來說非常重要。 但是,盡管檢查了客戶端和服務器時間之間的時間差異,但似乎存在長達3-4秒的差異。

我的角度代碼如下;

 // Pre ajax time (so we can see how long it took to get data from server)
    var timeElapsed = new Date().getTime();

    $http.get('/getServerTime.php')
        .success(function (data) {
            // Calculate the length of the ajax request in seconds
            timeElapsed = new Date().getTime() - timeElapsed;

            // Add that to the returned server time to get the current
            // server time. (data.date is provided by the getServerTime.php                       page)
            $scope.serverTime = data.date + timeElapsed;
            $scope.timeDifference = new Date().getTime() - $scope.serverTime;
        });

從理論上講,這應該可以工作,但差異最多可達4秒。

我們將非常感激地提出任何建議或代碼修改。

將客戶端和服務器時間混合在一起並不是一個好主意。 客戶端時間根本不可靠,因為用戶可以隨時隨地改變他的時間,無論如何他都想要。 如果他覺得好笑,他現在可以在06.06.2066度過他的時間。 那你的課程會做什么? 可能沒什么好處的。 不要混淆這些,最好的方法可能是使用服務器時間 - 只是 - 除了你只需要兩個時間點的差異來評估持續時間。 在這種情況下,您可以使用客戶端時間,因為對於時間戳的差異,絕對值無關緊要(2016或2066,誰在乎... 3秒是3秒)

此外,您的代碼還有另一個問題。 如果要通過添加從服務器返回的值加上自ajax調用后經過的時間來“計算當前服務器時間”,那么您將錯過請求到達服務器所需的延遲。

假設您在0ms發送請求 - 服務器將在20ms處獲取請求並將其當前服務器時間放在響應中。 然后你的客戶將得到結果,比如50ms。 那么與實際服務器時間相比,計算出的服務器時間將減少20ms。

最后你想要做的事情似乎是一種非常好的做法,這是公平的。

也許如果您告訴我們您希望通過這種方法實現什么目標,我們可以幫助您找到更好的解決方案

您可以將服務器配置為在“日期”標題中返回它的時間 - 這是一個標准的http標頭 - 這樣您就不需要專門的休息時間了: https//en.wikipedia.org/wiki/ List_of_HTTP_header_fields

即使這樣,您只有在請求離開服務器時才有時間戳。

如果您遇到與我相同的問題,並且您需要顯示自服務器啟動以來所經過的時間 - 網絡延遲在這里不是問題。 對於任何其他用法,您需要讓UTC完成工作。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM