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

标签 php post request guzzle pool

我在以下情况下需要帮助: 我必须将 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(), [

关于php - 如何使用 Guzzle 执行并发 POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46215636/

相关文章:

php - 使用 jQuery AJAX 在表单提交时调用 php 页面

javascript - 由于 while 循环,浏览器不断崩溃

php - curl post后,如何检查postfield - 调试

javascript - 是否可以通过http请求验证recaptcha? (阿迪达斯)

stream - 如何在 Dart 中从 Http 请求中读取所有二进制文件?

java - 如何向php发送数据?

php - MySQL 数据通过 php 显示。如果选择则显示选中的数据,如果不选择;显示全部数据。我怎样才能做到这一点?

php - ps 辅助 | grep php --- 检查 GET 参数

PHP $_POST 在 IE9 和 IIS7 上为空

ios - AFNetworking - 对 REST 进行 HTTP POST,发送带有 Base64 字符串图像的 JSON