2015-12-19 3 views
1

Я ищу пример кода в php.net, в котором объясняется, как открывать соединения с несколькими URL одновременно с помощью cURL. Но я не понимаю, что делают 2 цикла и почему их 2?Multi cURL, пожалуйста, объясните этот код php.net

//execute the handles 
do { 
    $mrc = curl_multi_exec($mh, $active); 
} while ($mrc == CURLM_CALL_MULTI_PERFORM); 

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

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

Они упоминают, что первый цикл имеет неблокирующую функцию, а второй цикл имеет функцию блокировки. Что это значит?

Может кто-нибудь объяснить, почему существуют 2 петли и что они делают?

Также, что такое CURLM_CALL_MULTI_PERFORM, php.net показывает его внутри кода, но нет никакой информации о том, что это такое.

Простите весь день, исследуя ответ, и это мое последнее средство. Надеюсь, кто-то может помочь.

+1

Вообще говоря: «Блокировка» (в контексте сокетов) означает, что операции над этим сокетом «приостанавливают» дальнейшее выполнение кода (например, чтение ожидает, пока оно не прочитает достаточное количество байтов или другое конечное условие, например, для примера байтов (think newline или EOF), тогда как функции на «неблокирующих» сокетах немедленно возвращаются, а последующий код запускается, даже если в сокете не было ответа. – ccKep

+1

См. [Этот комментарий] (http://php.net/manual/en/function.curl-multi-exec.php#80977) в документации: ** Если он возвращает CURLM_CALL_MULTI_PERFORM, вам лучше позвонить ему в ближайшее время, так как это является сигналом о том, что он все еще имеет локальные данные для отправки или удаленных данных для приема. ** – Barmar

+0

^спасибо, теперь имеет смысл –

ответ

1

Так я гугле точную строку кода в кавычки и нашел оригинальный парень, который написал, что фрагмент кода, который получил на php.net, чтобы объяснить, что он делает .. Даже он подтверждает, что это немного сбивает с толку

http://technosophos.com/2012/10/26/php-and-curlmultiexec.html

другое объяснение обнаружил прибегая к помощи кода в кавычки:

why curl_multi_exec in two loops

объяснение для 2 петель, с другой переполнения стека ответ:

Как показано, первый цикл предназначен для инициализации клиентов HTTP . Обычно он выполняется только один раз. Затем во втором цикле отправляются HTTP-запросы и получаются ответы.

Смежные вопросы