当前位置: 首页 > 知识库问答 >
问题:

PHP应用程序中的Guzzle池

戚高洁
2023-03-14

我正在尝试在PHP中使用Guzzle池。但我在处理异步请求时遇到了困难。下面是代码片段。

    $client = new \GuzzleHttp\Client();

    function test() 
    {
        $client = new \GuzzleHttp\Client();   
        $request = $client->createRequest('GET', 'http://l/?n=0', ['future' => true]);

        $client->send($request)->then(function ($response) {
            //echo 'Got a response! ' . $response;
            return "\n".$response->getBody();
        });

    }
    $res = test();
    var_dump($res); // echoes null - I know why it does so but how to resolve the issue.

有没有人,我怎么能让函数等待并获得正确的结果。

共有2个答案

单勇
2023-03-14

我想使用guzzle6、postAsync和pool分享的另一个示例。

function postInBulk($inputs)
{
    $client = new Client([
        'base_uri' => 'https://a.b.com'
    ]);
    $headers = [
        'Authorization' => 'Bearer token_from_directus_user'
    ];

    $requests = function ($a) use ($client, $headers) {
        for ($i = 0; $i < count($a); $i++) {
            yield function() use ($client, $headers) {
                return $client->postAsync('https://a.com/project/items/collection', [
                    'headers' => $headers,
                    'json' => [
                        "snippet" => "snippet",
                        "rank" => "1",
                        "status" => "published"
                    ]        
                ]);
            };
        }
        
    };

    $pool = new Pool($client, $requests($inputs),[
        'concurrency' => 5,
        'fulfilled' => function (Response $response, $index) {
            // this is delivered each successful response
        },
        'rejected' => function (RequestException $reason, $index) {
            // this is delivered each failed request
        },
    ]);

    $pool->promise()->wait();
}
姜玮
2023-03-14

如果你可以返回它,它就不会是代码风格的异步。返回promise并在外面打开它。

function test() 
{
   $client = new \GuzzleHttp\Client();   
   $request = $client->createRequest('GET', 'http://l/?n=0', ['future' => true]);

   // note the return
   return $client->send($request)->then(function ($response) {
       //echo 'Got a response! ' . $response;
       return "\n".$response->getBody();
   });   
}
test()->then(function($body){
     echo $body; // access body here inside `then`
});
 类似资料:
  • 我的系统路径是,我的应用程序文件夹在系统文件夹内。我面临以下错误... 警告:require_once(C:/xampp/htdocs/codeigniter/core/codeigniter.php)[function.require once]:打开流失败:在C:\xampp\htdocs\codeigniter\index中没有这样的文件或目录。php在线202 致命错误:require_o

  • 在PHP CRUD应用程序中实现撤消功能的最佳方法是什么?我能想出的唯一解决方案是在我的数据库中使用一种定期擦除的缓冲区表。 例如,如果用户在删除一条记录后单击“撤消”按钮,最后一次更改的id将被传递给一个处理程序,该处理程序将拉出缓冲区记录并将其恢复到该数据类型的主表中。如果“撤消”在4或5分钟内没有完成,收割者脚本将删除该条目。 这听起来可行吗?有没有更好的方法来完成这件事?

  • 问题内容: 因此,我正在编写一个框架,我希望以此为基础来开发一些我正在使用的应用程序(该框架在那里,所以我有一个可以使用的环境,并且该系统可以让我使用例如一个登录) 我要创建这个框架,并且它的应用程序都使用面向资源的体系结构。 现在,我想创建一个URL路由类,该类可以由APP编写器(也可能由CMS App用户)扩展,但我想通过查看以下方法找出最佳方法:其他应用程序如何做到这一点。 问题答案: 我更

  • 我正在开发一个必须符合HIPAA的PHP/MySQL应用程序。据我所知,任何可能识别某人的个人数据或任何医疗信息在静止和传输时都必须经过256位加密。我想知道最有效的方法是什么。 我使用的是Amazon Web Services,我曾想到对HTTP和数据库请求使用SSL加密来保护传输中的数据。至于静止数据,我想用AES 256编译一个自定义的MySQL服务器,以便使用AES_ENCRYPT和AES

  • 问题内容: 是否有一种实际的方法可以在PHP中实现多线程模型,无论是真正的还是仅对其进行仿真。一段时间以前,建议您可以强制操作系统加载PHP可执行文件的另一个实例并处理其他同时进行的进程。 这样做的问题是,当PHP代码完成执行PHP实例后,它仍保留在内存中,因为无法从PHP中杀死它。因此,如果您正在模拟多个线程,则可以想象会发生什么。因此,我仍在寻找一种可以在PHP中有效完成或模拟多线程的方法。有

  • 我正在尝试将文件上传到我的服务器,然后将该文件发送到Zendesk。Zendesk文档显示了如何: 这很好用。我现在必须用Guzzle(版本6)重写这个。我正在使用Symfony 2.7: 文件正在上传,但当我下载它时,它的内容中也会包含一些元数据(破坏了其他一些文件类型)。我想我没有正确上传,因为卷发的另一种方式很好。 我不知道为什么这些数据也作为文件的一部分发送(我不想这样做),或者是否可以为