Лучшая поддержка CURL с PHP и Linux

Я разработчик twittertrend.net, мне было интересно, есть ли более быстрый способ получить заголовки URL-адреса, кроме curl_multi? Я обрабатываю более 250 URL-адресов в минуту, и мне нужен действительно быстрый способ сделать это с точки зрения PHP. Можно использовать либо сценарий bash, а затем выводить заголовки, либо приложение C, что-нибудь, что может быть быстрее? В основном я программировал только на PHP, но я могу учиться. В настоящее время CURL_MULTI (с предоставлением 6 URL-адресов одновременно, работает нормально, но я бы предпочел что-то более быстрое? В конечном итоге я хотел бы придерживаться PHP для хранения и обработки любых MySQL.

Спасибо, Джеймс Хартиг

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 208
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Самый простой способ получить заголовки URL-адреса - использовать get_headers (). Что касается производительности, я не думаю, что вы можете превзойти curl_multi, но попробуйте протестировать его и убедитесь. Сложно сказать.

Если вы не против заняться действительно низкоуровневыми вещами, вы можете отправлять конвейерные необработанные запросы HTTP 1.1, используя функции сокета.

Было бы полезно узнать, где узкое место в том, что вы сейчас используете - сеть, процессор и т. д.

re: threading-via-bash-script, это возможно, но маловероятно: накладные расходы на создание процесса для такого сценария, вероятно, убьют скорость.

Если это импорт для вас, запустите демон, который ничего не делает, кроме такого разрешения, а затем подключитесь к демону локально. Затем вы можете поработать над тем, чтобы этот демон работал как можно быстрее, на C или C++ или на чем-то еще.

curl_multi + эти параметры, вероятно, ваш лучший выбор:

curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_NOBODY, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);

Единственным другим вариантом может быть использование wget с

--server-response

а затем многопоточность с использованием C / C++, Java и т. д. Я не уверен, что в конечном итоге это будет более быстрый вариант.

Хорошо, я сначала рассмотрю идею демона, чтобы увидеть, смогу ли я добраться куда-нибудь быстрее. Возможно, мне придется остаться с curl_multi. Другая проблема заключается в том, что я не могу получить время подключения или что-либо еще из curl_multi, только ответ.

James Hartig 12.12.2008 01:38

Хорошо, я понял следующее: get_headers = 0,0606 секунды на URL cURL = 0,01235 на URL gethostbynamel = 0,001025 сек на URL

Что я собираюсь сделать, так это сначала запустить gethostbynamel (), а затем cURL, это должно сократить время, потому что он все время будет разрешать хост, и, таким образом, cURL никогда не будет зависать при загрузке URL-адреса.

Есть возражения?

Ответ принят как подходящий

Я думаю, вам нужен многопроцессорный демон получения URL-адресов. PHP не поддерживает многопоточность, но ничто не мешает вам запустить несколько процессов демона PHP.

При этом отсутствие в PHP надлежащего сборщика мусора означает, что длительные процессы могут вызывать утечку памяти.

Запустите демон, который порождает множество экземпляров (настраиваемое, но контролируемое число) программы php, которая, конечно же, должна быть способна читать рабочую очередь, извлекать URL-адреса и записывать результаты в манере, которая является множественной. безопасный процесс; несколько процедур не должны в конечном итоге пытаться выполнять одну и ту же работу.

Вам нужно, чтобы все это работало автономно как демон, а не с веб-сервера. Действительно.

Недавно я написал в блоге сообщение о том, как ускорить работу curl_multi. Обычно я обрабатываю каждый запрос, как только он завершается, и использую очередь для одновременного выполнения большого количества запросов. Я добился больших успехов с этой техникой и использую ее для обработки ~ 6000 RSS-каналов в минуту. Надеюсь, это поможет!

http://onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/

Другие вопросы по теме