/ / Troppi socket aperti da cURL multi-php, curl, curl-multi, php-socket

Troppi socket aperti da cURL multi-php, curl, curl-multi, php-socket

Sto usando cURL multi per ottenere dati da alcuni siti web. Con il codice:

function getURL($ids)
{
global $mh;
$curl = array();
$response = array();
$n = count($ids);
for($i = 0; $i < $n; $i++) {
$id = $ids[$i];
$url = "http://www.domain.com/?id=".$id;

// Init cURL
$curl[$i] = curl_init($url);
curl_setopt($curl[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl[$i], CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl[$i], CURLOPT_USERAGENT, "Googlebot/2.1 (http://www.googlebot.com/bot.html)");
//curl_setopt($curl[$i], CURLOPT_FORBID_REUSE, true);
//curl_setopt($curl[$i], CURLOPT_HEADER, false);
curl_setopt($curl[$i], CURLOPT_HTTPHEADER, array(
"Connection: Keep-Alive",
"Keep-Alive: 300"
));

// Set to multi cURL
curl_multi_add_handle($mh, $curl[$i]);
}

// Execute
do {
curl_multi_exec($mh, $flag);
} while ($flag > 0);

// Get response
for($i = 1; $i < $n; $i++) {
// Get data
$id = $ids[$i];
$response[] = array(
"id" => $id,
"data" => curl_multi_getcontent($curl[$i])
);

// Remove handle
//curl_multi_remove_handle($mh, $curl[$i]);
}

// Reponse
return $response;
}

Ma, ho problemi, cURL apre troppe preseconnettersi al webserver. Ogni connessione, cURL crea un nuovo socket per il webserver. Voglio che la connessione corrente sia keep-alive per la prossima connessione. Non voglio quel 100 URL quindi cURL deve creare 100 socket per gestire :(

Mi aiuti per favore. Grazie mille !

risposte:

1 per risposta № 1

Quindi non aprire più socket, quindi modifica il codice per aprire solo socket X e quindi utilizzare ripetutamente tali socket finché tutti i tuoi $ids sono stati consumati Per prima cosa o passare meno $ ID alla funzione.