Когда лучше проверить асинхронные запросы cURL для завершения?

Несколько запросов cURL лучше выполнять асинхронно, то есть без каждого из запросов, ожидающих, пока все предыдущие запросы не получат ответы. Другая оптимизация во многих случаях начнет обрабатывать полученный ответ, не дожидаясь других ответов. Однако документы и официальные примеры не ясны, когда это возможно и как можно раньше проверять заполненные запросы (что обычно делается с curl_multi_info_read функции curl_multi_info_read ).

Итак, когда самый ранний момент для проверки заполненных запросов? Или какой оптимальный набор таких точек?

Это пример с страницы curl_multi_exec (комментарии в верхнем регистре – мои):

 <?php // create both cURL resources $ch1 = curl_init(); $ch2 = curl_init(); // set URL and other appropriate options curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt($ch2, CURLOPT_HEADER, 0); //create the multiple cURL handle $mh = curl_multi_init(); //add the two handles curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $active = null; //execute the handles do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE? while ($active && $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { // SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE? do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE? } // SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE? } // SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE? //close the handles curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); ?> 

Во-первых, для упрощения вашей жизни код возврата CURLM_CALL_MULTI_PERFORM не используется в современных libcurls (не используется в 7.20.0 или новее).

Затем, пока «активный» больше нуля, по крайней мере один активный переход продолжается, поэтому вы можете подождать с проверкой curl_multi_info_read (), если хотите.

Или вы можете вызвать curl_multi_info_read () сразу после каждого вызова curl_multi_exec () , это зависит от вас!