2014-04-30 235 views
0

我能夠使用curl_multi實現併發執行curl請求。但是我對這個迴應有問題。即使並行執行請求,只有在執行完所有URL之後纔會收到響應。不阻塞地返回異步請求

我的要求是在每個請求執行後立即返回響應。

有人可以指出我的解決方案。

<?php 
$price = urlencode("select * from html where url=\"http://www.flipkart.com/karwar- cuisine-traditional-recipes-small-coastal-town-karnataka/p/itmdfrx4z4erg9ya?pid=9788179917558\" and xpath=\"//span[contains(@class,'pprice')]/text()\""); 

$desc = urlencode("select * from html where url=\"http://www.flipkart.com/karwar-cuisine-traditional-recipes-small-coastal-town-karnataka/p/itmdfrx4z4erg9ya?pid=9788179917558\" and xpath=\"//div[@class='item_desc_text line']\""); 

$author = urlencode("select * from html where url=\"http://www.flipkart.com/karwar-cuisine-traditional-recipes-small-coastal-town-karnataka/p/itmdfrx4z4erg9ya?pid=9788179917558\" and xpath=\"//div[contains(@class,'secondary-info')]//a/text()\""); 

$title = urlencode("select * from html where url=\"http://www.flipkart.com/karwar-cuisine-traditional-recipes-small-coastal-town-karnataka/p/itmdfrx4z4erg9ya?pid=9788179917558\" and xpath=\"//div[contains(@class,'mprod-summary-title')]//h1/text()\""); 

$url1 = "https://query.yahooapis.com/v1/public/yql?q={$price}&format=json"; 
$url2 = "https://query.yahooapis.com/v1/public/yql?q={$desc}&format=json"; 
$url3 = "https://query.yahooapis.com/v1/public/yql?q={$author}&format=json"; 
$url4 = "https://query.yahooapis.com/v1/public/yql?q={$title}&format=json"; 

$nodes  = array(
$url1, 
$url2, 
$url3, 
$url4 
); 
$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); 


for ($i = 0; $i < $node_count; $i++) { 
$results[] = curl_multi_getcontent($curl_arr[$i]); 
} 
print_r($results); 

?> 

回答

0

只要還有任何轉移仍未完成,您的循環就會繼續運行!

(它忙碌循環,所以它總是會使用100%的CPU ......)