点击此链接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\"
})";
?>
答案 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>