2011-08-10 63 views
0

我使用cURL multi從一些網站獲取數據。隨着代碼:由cURL多打開的套接字太多

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; 
} 

但是,我有問題是cURL打開太多的套接字連接到網絡服務器。每個連接,cURL都會爲web服務器創建新的套接字。 我想當前的連接保持下一次連接。我不希望100網址,然後捲曲必須創建100座處理:(

請幫我。非常感謝!

+0

您正在使用cURL-multi,因此您的請求可以在相同的如果你發出100個請求,你可以期待這個,爲什麼這是一個問題?如果你寧願同步,定期使用cURL – Brad

回答

1

所以不開,很多插座。修改代碼以只開放X然後重複使用這些套接字,直到所有的$ids已被使用,或者將更少的$ id傳入到函數中。

+0

請幫我實現cURL? – user888193