首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同时发送请求

不同时发送请求
EN

Stack Overflow用户
提问于 2019-10-11 00:20:53
回答 1查看 764关注 0票数 2

我正在尝试使用Guzzle发出一些并发的请求。代码:

代码语言:javascript
复制
// Imports
use GuzzleHttp\Pool;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request as PSR7Request;

// Part of code that I have problem with
        $client = new Client([
            'timeout'  => 100
        ]);

        $requests = function ($filters, $carbon_date) {
            foreach ($filters as $filter) {
                yield new PSR7Request('GET', route('filters.run', ['filter' => $filter, 'date' => $carbon_date->format('Y/m/d')]));
                Log::debug("Filter Controller Report -> Filter {$filter} fired");
            }
        };

        $result = collect();
        $pool = new Pool($client, $requests($filters, $carbon_date), [
            'concurrency' => 10,
            'fulfilled' => function ($response) use (&$result) {
                $result = $result->merge(json_decode($response->getBody(), true));
            },
            'rejected' => function ($reason, $index) {
                Log::error("Filter Controller Report -> A filter has failed", compact('reason'));
            }
        ]);

        $pool->promise()->wait();

我使用的是Laravel,这个代码在控制器内。

代码是通过NGINX+PHP提供的。

每个子请求也会记录自己的执行情况。问题是我在日志里看到了这样的东西:

2019-10-11 02:10:06 production.DEBUG: Filter Manager -> Filter Filter1花了23秒

2019-10-11 02:10:06 production.DEBUG: Filter Controller报告-> Filter App\Filter\Filter 1已启动

2019年-10- 11 02:10:17 production.DEBUG: Filter Manager -> Filter Filter2用了11秒钟

2019-10-11 02:10:17 production.DEBUG: Filter Controller Report -> Filter App\Filter 2已启动

2019年-10-11 02:10:34 production.DEBUG: Filter Manager -> Filter Filter3花了17秒钟

2019-10-11 02:10:34 production.DEBUG: Filter Controller报告-> Filter App\Filter\Filter 3已启动

2019年-10-11 02:10:51 production.DEBUG: Filter Manager -> Filter Filter4花了17秒钟

2019-10-11 02:10:51 production.DEBUG: Filter Controller Report -> Filter App\Filter\Filter 4已启动

2019年-10-11 02:11:09 production.DEBUG: Filter Manager -> Filter Filter5用了18秒

2019-10-11 02:11:09 production.DEBUG: Filter Controller Report -> Filter App\Filter\Filter 5已启动

2019年-10-11 02:11:09 production.DEBUG: Filter Controller报告->过滤器花费86秒

我的过滤器需要10~20秒才能运行,所以我希望过滤器的整个请求大约需要20秒。您可以看到执行所有请求所需的时间之和(86秒)。

让我确信它不是并发运行的是,Fire日志出现在请求的实际执行之后,这并不是预期的。

我的结果是正确的,但时机不太好。

所以,任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-11 00:29:33

哇,我在口香糖文件里找不到任何关于这个的东西。

要真正拥有并发请求,您必须安装curl扩展。

我的PHP(Ubuntu19.04)没有安装它。安装完毕后,一切正常!

归功于这个令人敬畏的小小评论:Guzzle async requests not really async?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58332671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档