PHP效率ping机器数组

PHP efficiency ping array of machines

我正在通过 ip address ping 一组 12 台机器,并在一个简单的 Web 界面上显示状态(主机是否活动)。 这是我目前拥有的代码 -

$hosts = array ("192.168.0.100","192.168.0.101","192.168.0.102"); //etc.. 

foreach ($hosts as $hosts) {
    exec ("ping -i 1 -n 2 -l 1 $hosts", $ping_output);
    if(preg_match("/Reply/", $ping_output[2])) {
        echo "$hosts replied! <br />";
    } else {
        echo "$hosts did not reply! <br />";
    }
}

这可行,但扩展性不是很好。在页面加载之前我必须等待大约 15 秒,因为它正在 ping 所有机器并且需要时间。我将 ping 计数减少到只有 2 个回复,同时也降低了缓冲区大小。

有更好的方法吗?更高效?优于 15 秒? 任何建议表示赞赏。

谢谢

PHP 不会是这里最慢的部分,系统 ping 命令才是。考虑所有主机都离线的最坏情况。您的最短等待时间为 TTL * NumHosts。

更好的解决方案是让后台进程 运行 每 X 秒 ping 一次主机并更新某种状态标记(平面文件、数据库 table 等)。朝外的页面将立即读取这些状态标记,并且信息永远不会超过 X 秒。这还有一个额外的好处,即可以通过限制发生的 ping 数量来减少服务器和目标主机的压力。

如果该设置不可行,最好的选择是 fiddle 使用 ping 选项或寻找其他工具。