2017-09-14 37 views
3

私は以下の状況で助けが必要です: POSTリクエストをAPIエンドポイントに送信する必要があります。これはリクエストを同時に処理できます。しかし、それぞれに時間がかかります。時間を短縮するために、一度に複数のPOST要求を送信したい。Guzzleで同時POSTリクエストを実行するには?

はここにいくつかのコードの断片である:

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

コールバック関数を要求した後に呼び出されますが、不足しているPOSTペイロードがあります。どのようにGuzzleRequestを設定する必要がありますか?

答えて

0

私はこのコードを使用し、動作しているようです:

$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(), [ 
関連する問題