Не так давно встала передо мной задача: индексировать большое кол-во страниц с малым интервалом. Пример: есть 10000 страниц и их нужно сканировать каждые 2-3 минуты. Сначала просто думал, что поставлю скрипт на крон с интервалом запуска 2 минуты и будет мне счастье, но во время реализации начались проблемы 🙂 Скрипт попросту не успевал сканировать такое кол-во информации, фильтровать её и заносить нужную нам информацию в бд. Вот здесь и пришла идея написания демона, который бы сидел в оперативной памяти, проверял какое-нибудь хранилище “команд” и при их появлении начинал выполнять те или иные действия. Приступим 🙂

bot.php

<?php error_reporting ( E_ALL & ~E_NOTICE ); date_default_timezone_set("Europe/Kiev"); define( 'ROOT_DIR', dirname ( __FILE__ ) ); require_once( ROOT_DIR . '/libs/work.class.php'); require_once( ROOT_DIR . '/libs/curl.class.php'); require_once( ROOT_DIR . '/libs/db.class.php'); echo "Daemon running at " . date('d.m.Y G:i', time()) . "\n"; while(1) { DB::run(); $curl = new Curl(); $startTime = microtime(true); DB::query("SELECT * FROM `proccess` ORDER BY id"); $i = 0; while($row = DB::get_row()) { $i++; $page = $curl->init($row['link'])->exec(); if(!$page) echo "Error opened url. Please, check: " . $row['link']; } if($i != 0) echo "----------------\n" . date('d.m.Y G:i', time()) . " - " . $i . " urls has been successfully scanned. Time scan: " . round ((microtime(true) - $startTime), 5) . "\n"; sleep(15); }

 

Немного поясню. Демон фиксирует своё время запуска, далее в таблице “proccess” проверяет есть ли новые “Задания” и если есть, начинает их выполнять (в данном случае проверяет, есть ли новые url и если есть, то начинает индексировать их). По завершению работы, демон фиксирует время и какое кол-во url он проиндексировал. Далее засыпает на 15 секунд, потом он оживает и снова повторяет описанные действия.

Cron всё же не остался без внимания. Чтобы обезопасить себя от падения демона, я написал простенький sh скрипт, который проверяет наличие демона в процессах на сервере и если его там нет, то запускает его. 🙂

 

Зачем он нужен? – Здесь уже фантазии нет предела. От банального граббера, который моментально “ворует” новый материал с сайта донора, и до …

 

Кстати, если у кого-то будет стоять подобная задача, могу написать о multi_curl и как его “прилепить” к демону 🙂

Подписываемся на обновления блога по Email:

Введите адрес электронной почты



Метки: , ,

Оставьте свой комментарий