Ejecutar múltiples peticiones usando Curl paralelamente con PHP

Un escenario cada vez más común es crear una aplicación usando un popurri de APIs y queremos ofrecerle al usuario una respuesta lo más rápida posible. Si los datos que nos pide el usuario no están en local que debemos solicitarlos a varias APIs, si se hace secuencialmente se puede dar un escenario como el siguiente: en el que el API 1 tarda 2seg, API 2 3seg, API 3 3seg y API 4 8seg, suma un total de 16 segundos, con lo que el usuario se nos puede desesperarse un poco. En cambio si hacemos las peticiones simultáneamente la respuesta es posiblemente 8 segundos, lo que saldría en este escenario la mitad de tiempo, el usuario de aplicación te lo va a agraceder :).

Este es código PHP para lograr las peticiones paralelas.

$nodes = array(‘http://www.api1.com’, ‘http://www.api2.com’, ‘http://www.api3.com’, ‘http://www.api4.com’);
$node_count = count($nodes);

$curl_arr = array();
$master = curl_multi_init();

for($i = 0; $i < $node_count; $i++)
{
$url =$nodes[$i];
$curl_arr[$i] = curl_init($url); curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($master, $curl_arr[$i]); } do { curl_multi_exec($master,$running);
}

while($running > 0);

echo “results: “;
for($i = 0; $i < $node_count; $i++)
{
$results = curl_multi_getcontent ( $curl_arr[$i] );
echo( $i . “\n” . $results . “\n”);
}
echo ‘done’;

 


Visto en rustyrazorblade.com y php.net

You may also like...