Javascript 来自客户端浏览器而非网络主机的Ping(延迟)请求

Javascript 来自客户端浏览器而非网络主机的Ping(延迟)请求,javascript,php,Javascript,Php,我想知道如何更改代码,使需求不是来自webhosting,而是来自客户端浏览器,在本例中,显示相应客户端浏览器对特定网站/服务器的“ms”数 <? function ping($host, $port, $timeout) { $tB = microtime(true); $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); if (!$fP) { return "Server is down"; } $

我想知道如何更改代码,使需求不是来自webhosting,而是来自客户端浏览器,在本例中,显示相应客户端浏览器对特定网站/服务器的“ms”数

<?
function ping($host, $port, $timeout) { 
  $tB = microtime(true); 
  $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); 
  if (!$fP) { return "Server is down"; } 
  $tA = microtime(true); 
  return round((($tA - $tB) * 1000), 0)." ms"; 
}

//Echoing it will display the ping if the host is up, if not it'll say "down".
echo ping("google.com", 80, 10); 
?>

这在技术上是不可能的。特别是,由于您想要使用PHP,因此无法在客户端执行任何PHP代码

在客户机上测量延迟的唯一方法是通过JavaScript,由于同源策略,您在这方面的能力非常有限。您需要在要测量延迟的服务器上有一个延迟测量JavaScript(我这里不说真正的“ping”,因为由于安全原因,发送原始数据包也是不可能的),以及在同一台主机上有一个WebSocket服务器。然后,您可以通过来自此服务器的JS建立WebSocket连接,并评估建立WebSocket连接的延迟

这离真正的ping或TCP握手太远了——您的示例也不是真正的ICMP,因此也不是真正的ping。另外,您不能通过WebSocket或AJAX请求从JavaScript连接到您选择的任何主机。所以,你想要实现的是不可能的