PHP: самый эффективный способ сделать несколько fsockopen ();соединения? - PullRequest
0 голосов
/ 17 ноября 2011

Эй, ребята, я делаю сайт, где вы размещаете сервер для рекламы. Когда пользователь заходит на страницу индекса моего веб-сайта, он захватывает 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;
    }

}

}

Этот способ работает нормально, но единственным недостатком является то, что при загрузке сайта загрузка веб-сайта занимает от 2 до 4 секунд из-за вызываемых методов fsockopen (). Я хочу знать, есть ли лучший способ сделать это, который сократит время ожидания перед загрузкой сайта.

Любая информация будет оценена, спасибо.

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Сохранение онлайн-статуса и времени последней проверки в базе данных. Если, например, время последней проверки превышает 15 минут, обновите его.Я уверен, что вам не нужно получать статус КАЖДОЙ загрузки страницы?Это время, которое требуется для подключения к каждому серверу, что замедляет работу сайта.

С другой стороны, вы, вероятно, захотите перенести процесс обновления в cronjob вместо того, чтобы полагаться на кого-то, посещающего ваш сайт, для обновления статусов сервера.

0 голосов
/ 17 ноября 2011

Глядя на ваш пример, я бы превратил все биты $ status в javascript-вызовы на другую страницу php, которая проверяет этот отдельный сервер.

Однако идея перенести проверки статуса в задание cron или использоватьКэширование статуса тоже очень хорошо.Возможно, сохраняйте статусы в базе данных, только проверяйте статусы, срок действия которых истек (установленный вами срок).

...