2016-07-28 4 views
1

Итак, используя Guzzle 6, чтобы сделать неопределенные одновременные вызовы api, но одна из вещей, которые я хочу сделать, отслеживает, какое значение массива обещает в настоящее время обрабатывать, так как я изначально обрабатывать вызовы api на основе результата запроса базы данных. И после этого я хочу обновить значение обратно в базу данных с тем, что вернусь из api.Использование Guzzle 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