Как использовать все ресурсы интернет соединения при парсинге сайтов?
Я написал программу парсер на PHP, работает на денвере. Меня начала не устраивать скорость и, для сравнения, я протестировал работу этой программы у знакомого. У его скорость до 25Мбит, скачивание торентов идет со скоростью 7 Мегобайт, против моих до 6144 Кбит/с и скачивания торента 700 Килобайт.
В итоге разница в скорости работы оказалась незаметной, что меня очень удивило.
Подскажите как использовать интернет-соединение на полную катушку?
file_get_contents - самый тупой вариант, поскольку пока не обработается одна страница все остальные сосут. соответственно похеру какая ширина канала: при так подходе его не забить.
используйте мультикурл для грабинга, складывайте результат в базу/файлы и затем (или паралельно) спокойно с ними работайте.
Если Ваш скрипт утилизирует интернет соединение не полностью - тому есть несколько вероятных причин:
a) сайт который вы парсите отдает поток по 1 соединению меньше чем Ваш канал
б) в работе скрипта есть простои на парсинг, работу с базой итд
Решение в общем случае одинаковое: запускать несколько копий парсера одновременно, смотреть на загрузку канала и процессора - во что упретесь первым угадать сложно.
PS Еще могу посоветовать не использовать модные dom парсеры и обертки на curl - простой curl и простые самодельные regexp работают в 10-100 раз быстрее.
PPS Вы путаетесь в показаниях по скорости) 25Мбит это округленно ~3 мегабайт/секунду, торенты не могут качаться на 7Mb/s
разделить сборщик и парсер на два скрипта, запускать параллельно несколько копий сборщика (чтобы использовать весь канал) и несколько копий парсера (чтобы использовать максимум ресурсов процессора).
на данный момент в нем используются file_get_contents и curl для отправки post запроса, сравнивал это с вариантом на Snoopy. Первый оказался в 2 раза быстрее. 90% времени приходится на file_get_contents, с бд не работает. Может есть еще более быстрые альтернативы?
только что сделал тест, запустил программу по очереди три раза по разным базам и одновременно по тем же. В итоге на первый вариант выполнялся 361 сек., а второй 343 сек.