【问题标题】:PHP: Most efficient way to make multiple fsockopen(); connections?PHP:制作多个 fsockopen() 的最有效方法;连接?
【发布时间】:2011-11-16 23:19:04
【问题描述】:

大家好,我正在制作一个网站,您可以在其中提交服务器以进行广告。当用户进入我网站的索引页面时,它会抓取所有提交的服务器的 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 秒才能开始加载网站。我想知道是否有更好的方法来减少网站加载前的等待时间。

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

【问题讨论】:

    标签: php fsockopen


    【解决方案1】:

    将在线状态和上次检查时间存储在数据库中,如果上次检查时间长于15分钟,例如,更新它。我很确定您不需要获取每个页面加载的状态?这是连接到每台服务器所需的时间,这会降低网站速度。

    再一次,您可能希望将更新过程转移到 cronjob,而不是依赖访问您网站的人来更新服务器状态。

    【讨论】:

    • 是的,我也在为我网站的另一部分寻找 Cron 作业,但我在 atm 上的托管计划不支持 cron 作业。我必须升级才能拥有它们。另外感谢您的建议,我会尝试一下似乎是一个更好的主意。
    【解决方案2】:

    看看你的例子,我会让所有的 $status 位都是对另一个检查那个单独服务器的 php 页面的 javascript 调用。

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

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 2013-06-10
      • 2014-12-06
      • 1970-01-01
      • 2010-11-26
      • 2015-07-29
      相关资源
      最近更新 更多