PHP:制作多个fsockopen()的最有效方法;连接?

时间:2011-11-16 23:19:05

标签: php fsockopen

嘿伙计们,我正在建立一个网站,您可以在其中提交广告服务器。当用户访问我的网站的索引页面时,它会抓取所有提交的服务器的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秒。我想知道是否有更好的方法可以减少网站加载前的等待时间。

任何信息都将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:1)

将在线状态和上次检查时间存储在数据库中,如果上次检查时间超过15分钟,则更新它。我很确定你不需要获得每个页面加载的状态?这是连接到减慢网站速度的每台服务器所需的时间。

然后,您可能希望将更新过程移至cronjob,而不是依赖访问您网站的某人来更新服务器状态。

答案 1 :(得分:0)

看看你的例子,我将所有的$ status位调用到另一个检查个别服务器的php页面。

但是,将状态检查移动到cron作业或使用某种状态缓存的想法也非常好。也许只在数据库中存储状态只检查已经过期的状态(由你设置的时间限制)。