entendiendo php curl multi exec


Estoy tratando de entender curl_multi_exec. He copiado un fragmento del ejemplo del manual aquí. Así que me pregunto, ¿cómo funciona? El primer bucle envía la solicitud http supongo? Pero luego es seguido por un bucle dentro de un bucle usando funciones con banderas aparentemente indocumentadas..

Me gustaría descargar +=70 urls +=en paralelo.

Http://www.php.net/manual/en/function.curl-multi-exec.php

<?php
...
$active = null;
//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);
    }
}
...
?>
Author: glennv, 2013-03-22

1 answers

Puede explorar dos artículos que describen este ejemplo.

PHP y curl_multi_exec

Primero, aquí está el nivel alto. Hay dos bucles exteriores. El primero es responsable de limpiar el búfer de curl en este momento. El segundo es responsable de esperar más información, y luego obtener esa información. Este es un ejemplo de lo que se llama bloqueo de E/S. Bloqueamos la ejecución del resto del programa hasta que la E/S de red esté terminada. Mientras que esto no es la forma más preferible en general para manejar E/S de red, es realmente nuestra única opción en PHP síncrono de un solo subproceso.

Haciendo curl_multi_exec de la manera correcta

Primero la variable $mrc y del manual aprendemos que la respuesta es un código cURL definido en las Constantes Predefinidas cURL. En esssence es una respuesta regular y como con cualquier otra función PHP curl_multi_exec no es diferente y solo devuelve una respuesta una vez que ha terminado. Que significa que solo debería haber UNA respuesta. En un mundo perfecto esta respuesta única es 0 (cero) o igual a la constante predefinida CURLM_OK.

 22
Author: sectus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-08 07:17:10