Как выполнять параллельные POST-запросы с помощью Guzzle?

Мне нужна помощь в следующих ситуациях:
Я должен отправить запросы POST в конечную точку API, которая может обрабатывать запросы одновременно. Но требует времени для каждого. Чтобы сократить время, я хочу отправить несколько запросов 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?

3

Решение

Я использую этот код, и он, кажется, работает:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]