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
选项或寻找其他工具。
我正在通过 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
选项或寻找其他工具。