如何使用Guzzle执行并发的POST请求?

3
我可以帮助您解决以下问题: 我需要向API端点发送POST请求,该端点可以同时处理多个请求。但是每个请求都需要时间。为了缩短时间,我希望能够一次发送多个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有效载荷丢失了。我该如何配置Guzzle请求?
1个回答

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(), [

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接