2016-07-28 31 views
1

So im Guzzle 6 zu unbestimmten gleichzeitige API-Aufrufe, aber eine der Dinge, die ich tun will, verfolgen, welche Array-Wert das Versprechen derzeit verarbeitet wird, seit ich ursprünglich Verarbeiten Sie die API-Aufrufe basierend auf dem Ergebnis der Datenbankabfrage. Und danach möchte ich den Wert zurück in die Datenbank mit allem, was ich zurück von der API bekomme.Verwenden Sie Guzzle 6 Concurrent Call und verfolgen Sie zusätzliche Parameter

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(); 
... 

Jede Hilfe mit diesem wäre erstaunlich. Ich möchte Ratschläge erhalten, wie ich diese Situation am besten angehen kann. Ich würde es vorziehen, es auf eine intelligente, logische Weise zu machen.

Vielen Dank für Ihre Hilfe

Antwort

2

Also habe ich das herausgefunden.

Grundsätzlich

$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); 
    } 
}; 

nun später der Index in der Pool-Funktionalität enthält den Index, den Sie möchten.

Hoffe, das hilft.

Referenz: https://github.com/guzzle/guzzle/pull/1203