嘿,伙计们,我正在做一个网站,在那里你可以提交一个服务器来做广告。当用户转到我的网站的索引页面时,它获取所有提交的服务器的ip,然后使用fsockopen()测试它是否在线,如下所示:
while($row = mysql_fetch_assoc($rs)) {
$ip = $row['ip'];
$info = @fsockopen($ip, 25565, $errno, $errstr, 0.5);
if($info) {
$status = "<div><img width='32px' height='32px'
title='$name is online!' src='images/online.png'/></div>";
$online = true;
} else {
$status = "<div><img width='32px' height='32px'
title='$name is offline!' src='images/offline.png'/></div>";
$online = false;
}
}
}这种方式工作得很好,但唯一的缺点是当你加载网站时,由于调用了fsockopen()方法,所以需要2-4秒才能开始加载网站。我想知道是否有更好的方法来减少网站加载前的等待时间。
任何信息都将不胜感激,谢谢。
发布于 2011-11-17 07:29:44
将在线状态和上次检查时间存储在数据库中,如果上次检查时间超过15分钟,则对其进行更新。我很确定你不需要获取每个页面加载的状态?连接到每台服务器所需的时间会降低网站的运行速度。
然后,您可能希望将更新过程转移到cronjob,而不是依赖于访问您的网站的人来更新服务器状态。
发布于 2011-11-17 07:32:14
看看你的例子,我会让所有的$status代码都是对另一个检查单个服务器的php页面的javascript调用。
但是,将状态检查转移到cron作业或使用某种状态缓存的想法也非常好。也许在数据库中存储状态只检查已过期的状态(时间限制由您设置)。
https://stackoverflow.com/questions/8160128
复制相似问题