计算客户端和服务器之间的网络延迟

时间:2013-07-18 06:01:30

标签: php javascript

点击此链接http://tinyurl.com/l96z2m2

它使用php使用javascript和Server时间检索客户端设备时间。和延迟是网络往返时间,即发送请求和收到响应之间的时间。

我想在同一时间比较两次。必须忽略网络延迟。

应该可以通过计算“在客户端发送的请求”和“在服务器上接收的请求”之间的时间或“在服务器上收到的请求”和“在客户端收到的响应”之间的时间来计算。

的index.html

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" ></script>
<script>
var b = new Date();
$.getJSON("http://localhost/json.php?callback=?", function(data){
var a = new Date();
document.write("|Client-"+a.getUTCHours()+":"+a.getUTCMinutes()+":"+a.getUTCSeconds()+":"+a.getUTCMilliseconds()+"|    Server-"+data.time);
  var c = a - b;
document.write("|delay-"+c);
});
</script>

json.php

<?php
$callback = $_GET["callback"];

function udate($format, $utimestamp = null) {
if (is_null($utimestamp))
$utimestamp = microtime(true);

$timestamp = floor($utimestamp);
$milliseconds = round(($utimestamp - $timestamp) * 1000000);

return date(preg_replace('`(?<!\\\\)u`', $milliseconds, $format), $timestamp);
}

 $t =  udate('H:i:s:u');

 echo $callback . "({
 \"time\":\"$t\"

 })";
 ?>

2 个答案:

答案 0 :(得分:2)

看起来你在HTTP中重新做NTP。您可以查看NTP协议如何工作http://en.wikipedia.org/wiki/Network_Time_Protocol

简而言之,您可以轻松衡量服务器和客户端之间的往返时间。 NTP假设两次旅行之间的时间(客户端 - >服务器和服务器 - >客户端)是对称的。

您可能需要将此时钟偏差计算运行3次以上,并将其最小值进行更好的测量。

另请注意,您的RTT包含在OS / HTTP堆栈上花费的时间,因此最终数字可能不如NTP协议准确。

答案 1 :(得分:0)

重要的是要意识到它并不像服务器时间和客户端时间那样简单,而是计算不同以获得网络延迟......

如果您使用客户端UTC时间和服务器UTC时间,则无法保证网络延迟是两者之间的差异,因为客户端可以更改其时间并使其无效。

但如果你认为这是延迟,你会做类似以下的事情:

<强> JavaScript的:

var d = Date.UTC();
  

返回指定日期与1970年1月1日午夜之间的毫秒数

<强> PHP:

<?php
    //Get miliseconds since 1970
    $time = time() * 1000;
    echo $time;
?>
  

在PHP中,您只需调用time()即可获得自1970年1月1日00:00:00 GMT以来的时间(以秒为单位)。如果你想要毫秒(do()* 1000)。

使用上面的PHP RESTful服务,然后在JavaScript中使用ajax调用服务或者执行PHP部分,然后通过执行以下操作来比较JavaScript中的两个:

<script type="text/javascript">
    var serverTime = "<?php Print(time() * 1000); ?>";
    var clientTime = Date.UTC();
    var delay = clientTime - serverTime;
</script>