2016-07-28 49 views
1

所以即时使用Guzzle 6来进行不确定的并发api调用,但我想要做的事情之一是记录承诺当前正在处理的数组值根据数据库查询结果处理api调用。之后,我想用我从api获得的任何信息将值更新回数据库。使用Gu 6 6并发调用并跟踪额外参数

use GuzzleHttp\Pool; 
use GuzzleHttp\Client; 
use GuzzleHttp\Psr7\Request; 

$client = new Client(); 

$requests = function() { 
    $uri = 'http://127.0.0.1:8126/guzzle-server/perf'; 
    foreach($database_result as $res) { 

     /*the res array contains 
     ['id' => 'db id', 'query' => 'get query array']; 
     */ 

     $url = $uri . '?' . http_build_query($res['query']); 

     yield new Request('GET', $url); 
    } 
}; 

$pool = new Pool($client, $requests(), [ 
    'concurrency' => 5, 
    'fulfilled' => function ($response, $index) { 
     /** 
     * HERE i want to be able to somehow 
     * retrieve the current responses db id 
     * this way I can obviously update anything 
     * i want on the db side 
     */ 
    }, 
    'rejected' => function ($reason, $index) { 
     /** 
     * HERE i want to be able to somehow 
     * retrieve the current responses db id 
     * this way I can obviously update anything 
     * i want on the db side 
     */ 
    }, 
]); 

// Initiate the transfers and create a promise 
$promise = $pool->promise(); 

// Force the pool of requests to complete. 
$promise->wait(); 
... 

任何帮助,这将是惊人的。我想获得关于如何最好地处理这种情况的建议。我宁愿以聪明,合乎逻辑的方式去做。

谢谢你的帮助

回答

2

所以我想通了。

基本上

$requests = function() { 
    $uri = 'http://127.0.0.1:8126/guzzle-server/perf'; 
    foreach($database_result as $key => $res) { 

     /*the res array was updated to be 
     ['id' => 'get query array']; 
     */ 

     $url = $uri . '?' . http_build_query($res); 

     //here is the key difference in change 
     yield $key => new Request('GET', $url); 
    } 
}; 

现在后面的池功能指数将包含你想要的索引。

希望这会有所帮助。

参考:https://github.com/guzzle/guzzle/pull/1203