2015-06-12 30 views
1

我想弄清楚如何從單個curl init更改連接函數以使用curl multi init。如何將curl_init調用轉換爲curl_multi_init

這裏的現有代碼:

protected function getConnection() 
{ 
    if (!$this->connection) { 
     $this->connection = curl_init(); 
    } 

    return $this->connection; 
} 

下面是我嘗試過,但它沒有做任何事情,甚至不引發錯誤:

protected function getConnection() 
    { 
$mh = curl_multi_init(); 

for($i=0; $i < 10; $i++) 
{ 

    { 
     if (!$this->connection) { 
      $this->connection[$i] = curl_init(); 

     } 

     return $this->connection[$i]; 
    } 

    curl_multi_add_handle($mh, $connection[$i]); 

} 

    $running = 0; 
    do { 
     curl_multi_exec($mh, $running); 
    } while ($running > 0); 
} 

我在做什麼錯?提前致謝!

+0

請記住,一旦調用了'return',函數就會停止。在你的函數中間調用一個'return'就意味着它後面的任何代碼都不會運行。 – seane

回答

1
do { 
    curl_multi_exec($mh, $running); 
} while ($running > 0); 

這是burn a lot of CPU cycles,雖然不是很多。

它應該最終完成,如果句柄是有效的,但我們不能看到連接是如何填充的 - 並且不清楚爲什麼初始化數組值然後從方法返回,如果連接變量爲false。代碼是卡在循環中還是剛剛返回前面的if語句?如果前者是這種情況,則根據鏈接的示例添加超時。如果後者在調用方法之前填充連接數組。

+0

連接來自代碼中不同部分的函數調用。感謝提示 - 我會適應在通話時填充句柄。 –

相關問題