2017-09-14 1 views
3

Ich brauche Hilfe in der folgenden Situation: Ich muss POST-Anfragen an einen API-Endpunkt senden, der Anfragen gleichzeitig behandeln kann. Aber braucht Zeit für jeden. Um die Zeit zu reduzieren, möchte ich mehrere POST-Anfragen gleichzeitig senden.Wie führe ich gleichzeitige POST-Anfragen mit Guzzle aus?

Hier sind einige Code-Fragmente:

use GuzzleHttp\Pool as GuzzlePool; 
use GuzzleHttp\Client as GuzzleClient; 
use GuzzleHttp\Psr7\Request as GuzzleRequest; 

[...]

foreach ($aRequestParams as $sRequestParam) { 
    $aRequestList[] = new GuzzleRequest('POST', $sRoute, 
    [ 
// 'form_params' => [ 
//   'jsonString' => $sRequestParam 
//  ] 
     'body' => $sRequestParam 
//  'multipart' => [ 
//   [ 
//    'name' => 'jsonString', 
//    'contents' => $sRequestParam 
//   ] 
//  ] 
    ] 
    ); 
} 
$oGuzzlePool = new GuzzlePool(new GuzzleClient(), $aRequestList, [ 
    'concurrency' => 8, 
    'fulfilled' => [$this, 'processFulfilledCallback'], 
    'rejected' => [$this, 'processRejectedCallback'] 
]); 

$oPromise = $oGuzzlePool->promise(); 
$oPromise->wait(); 

Die Callback-Funktionen nach Anforderung aufgerufen werden, aber es ist die POST fehlt Nutzlast. Wie muss ich den GuzzleRequest konfigurieren?

Antwort

0

Ich benutze diesen Code und es scheint zu funktionieren:

$oGuzzleClient = new GuzzleClient(); 
    $aRequestList = function() use ($oGuzzleClient, $aRequestParams, $sRoute) { 
        foreach ($aRequestParams as $sRequestParam) { 
         yield function() use ($oGuzzleClient, $sRequestParam, $sRoute) { 
          return $oGuzzleClient->postAsync($sRoute, [ 
           'form_params' => [ 
            'jsonString' => $sRequestParam 
           ] 
          ]); 
         }; 
        } 
       }; 
$oGuzzlePool = new GuzzlePool($oGuzzleClient, $aRequestList(), [