2017-09-14 8 views
3

다음 상황에서 도움이 필요합니다. 요청을 동시에 처리 할 수있는 API 끝점에 POST 요청을 보내야합니다. 그러나 각각에 대해 시간이 걸립니다. 시간을 줄이기 위해 한 번에 여러 개의 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(), [