来自客户端浏览器的 Ping(延迟)请求,而不是来自虚拟主机

我想知道如何更改代码以使需求不是来自虚拟主机,而是来自客户端浏览器,在这种情况下显示相应的客户端浏览器对特定网站/服务器有多少“毫秒”


<?

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); 

?>


慕尼黑5688855
浏览 146回答 1
1回答

慕田峪4524236

这在技术上是不可能的。特别是,因为你想使用 PHP - 你不能让任何 PHP 代码在客户端执行。测量客户端延迟的唯一方法是通过 JavaScript,由于同源策略,您在此处非常有限。您需要在要测量延迟的服务器上进行延迟测量 JavaScript(我在这里没有说真正的“ping”,因为发送原始数据包也是不可能的 - 由于安全原因),以及同一主机上的 WebSocket 服务器。然后您可以通过来自该服务器的 JS 建立 WebSocket 连接,并评估建立 WebSocket 连接的延迟。这离真正的 ping 或 TCP 握手太远了——你的例子也不是真正的 ICMP,所以也不是真正的 ping。此外,您无法通过 WebSocket 或 AJAX 请求从 JavaScript 连接到您选择的任何主机。所以,你想要达到的目标是不可能的。
打开App,查看更多内容
随时随地看视频慕课网APP