Я ищу пример кода в 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 показывает его внутри кода, но нет никакой информации о том, что это такое.
Простите весь день, исследуя ответ, и это мое последнее средство. Надеюсь, кто-то может помочь.
Вообще говоря: «Блокировка» (в контексте сокетов) означает, что операции над этим сокетом «приостанавливают» дальнейшее выполнение кода (например, чтение ожидает, пока оно не прочитает достаточное количество байтов или другое конечное условие, например, для примера байтов (think newline или EOF), тогда как функции на «неблокирующих» сокетах немедленно возвращаются, а последующий код запускается, даже если в сокете не было ответа. – ccKep
См. [Этот комментарий] (http://php.net/manual/en/function.curl-multi-exec.php#80977) в документации: ** Если он возвращает CURLM_CALL_MULTI_PERFORM, вам лучше позвонить ему в ближайшее время, так как это является сигналом о том, что он все еще имеет локальные данные для отправки или удаленных данных для приема. ** – Barmar
^спасибо, теперь имеет смысл –