我想知道如何更改代码,以便需求不是来自虚拟主机,而是来自客户端浏览器,在这种情况下,显示相应的客户端浏览器对特定网站/服务器有多少"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连接到您选择的任何主机。所以,你想要实现的是不可能的。