Curl многопоточность

#php #mysql

#php #mysql

Вопрос:

я нахожу функцию Curl, которая может открывать определенный номер. веб-страница, открытая одновременно, также не будет выводить или возвращать данные false, что принесет больше пользы. Мне нужно получить доступ к 5-10 URL-адресам одновременно.. Я слышал, что многопоточность abt Curl, но у меня нет подходящей функции или класса для ее использования..

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

Я сделал один :

 function mutload($url){
if(!is_array($url)){
exit;
}

for($i=0;$i<count($url);$i  ){
// create both cURL resources
$ch[] = curl_init();
$ch[] = curl_init();

// set URL and other appropriate options
curl_setopt($ch[$i], CURLOPT_URL, $url[$i]);
curl_setopt($ch[$i], CURLOPT_HEADER, 0);
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 0);

}
//create the multiple cURL handle
$mh = curl_multi_init();

for($i=0;$i<count($url);$i  ){
//add the two handles
curl_multi_add_handle($mh,$ch[$i]);
}
$active = null;
//execute the handles
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active amp;amp; $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
    do {
        $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
 }
}

//close the handles
for($i=0;$i<count($url);$i  ){
curl_multi_remove_handle($mh, $ch[$i]);
}
curl_multi_close($mh);
}
  

хорошо! но я смущен тем, что он будет подключать все URL-адреса одновременно или по одному! mre over я загружаю контент, также я хочу только подключиться или запросить сайт, мне не нужен любой контент оттуда, я использовал RETURNTRASFER, false, но не сработал.. пожалуйста, скажите мне спасибо!

Ответ №1:

Вы ищете curl_multi_* семейство функций. Взгляните на curl_multi_exec .

Установите CURLOPT_NOBODY , чтобы запретить curl загружать любой cotent.

Комментарии:

1. как вы сказали, я сделал один скрипт, пожалуйста, посмотрите!

2. @SoumoGorai обновил ответ с CURLOPT_NOBODY помощью . multi_ Функции будут отправлять запросы параллельно. Не могли бы вы немного уточнить, в чем заключается ваш оставшийся вопрос? У меня возникли проблемы с чтением вашего вопроса, вероятно, потому, что английский не является моим родным языком, и у вас, похоже, очень творческая орфография. Прав ли я, предполагая mre over , что означает «более того» и abt «о»?

3. ваш английский очень хорош! у меня нет проблем, чтобы прочитать это хорошо, это некоторые распространенные слова в наши дни, которые все равно используются! можете ли вы сказать мне, может ли мой скрипт отправлять запросы параллельно или один за другим? Спасибо

Ответ №2:

Я не тестировал ваш код, но curl_multi добавляет элементы в очередь из цикла и обрабатывает их параллельно. Иногда могут возникать проблемы, если вы пытаетесь загрузить 100 URL-адресов, но для нескольких URL-адресов все должно быть в порядке. Если у вас длительный поиск в DNS или медленные серверы, всем вашим результатам придется ждать самого медленного запроса.

Этот код протестирован и должен работать, он чем-то похож на ваш:

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

Комментарии:

1. я использовал этот скрипт, который u сказал «Rolling Curl». но мне не нужно загружать как 1000 или больше, в основном 20-30 или редко 50. кроме того, свертывание Curl занимает много времени, на 3 задания требуется 468, а моя функция занимает 140 для 3 заданий! в любом случае, можете ли вы сказать мне, может ли моя функция запускать параллельное соединение или нет? Спасибо

2. curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 0); Это должно быть true, чтобы вернуть что-либо