Мне нужна помощь в следующих ситуациях:
Я должен отправить запросы 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?
Я использую этот код, и он, кажется, работает:
$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(), [
Других решений пока нет …