2014-04-30 237 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 ......)