我正在通过ip address
对12台计算机的数组进行ping操作,并在简单的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秒? 任何建议表示赞赏。
由于
答案 0 :(得分:3)
PHP不会成为这里的缓慢部分,系统$('.cp-play').one("click", function(){
//Code stuff
}
命令将是。考虑所有主机都处于脱机状态的最坏情况。您将获得TTL * NumHosts的最短等待时间。
更好的解决方案是运行后台进程,每隔X秒ping主机并更新某种状态标记(平面文件,数据库表等)。向外的页面将立即读取这些状态标记,并且信息永远不会超过X秒。这还有一个额外的好处,可以通过限制发生的ping数量来减少服务器和目标主机的压力。
如果该设置不是一个可行的选项,最好的办法是摆弄ping
选项或找到不同的工具。