Laravel应用程序不并行处理请求


Laravel app not handling requests in parallel

我正在构建一个Laravel网络应用程序,该应用程序执行一些长时间运行的查询并使用几个(内部和外部)API。我很难弄清楚为什么我不能并行处理请求。为了阐明我的问题,以下是通过示例对我的系统/问题的高级概述:

  • 页面加载
  • 在页面加载时调用的 AJAX 请求GET BigQuery 结果集(长时间运行的查询),清理数据并执行 python 聚类算法,该算法创建一个图像并将该图像的路径返回到 Web 应用程序
    • 长时间运行(~15 秒)
    • 在执行 Python 群集时将最大化 CPU(有时)
  • 调用的 AJAX 请求,该请求查询外部 API 以获取某些信息并仅显示它
    • 短跑(~1-2 秒)

问题是我的 AJAX 请求没有并行处理。收到第一个,Web 应用在第一个完成之前不会开始另一个。我已经检查了Chrome开发工具中的网络选项卡,并且两个请求都是并行发出的,但Web服务器没有并行处理它们。

我无法确定这是否是 php、工匠、Laravel配置中的错误,或者我手上是否有其他问题。我已经用两个简单的路由闭包做了一些测试:一个只是返回一个字符串,另一个在sleep(10)之后返回一个字符串。当我使用 AJAX 调用两者时,即时返回的路由不会返回,直到长时间运行的请求被送达(睡眠后)。

TL;DR:很明显,两个 AJAX 调用都是并行触发和接收的,但是我如何让我的 Laravel Web 应用程序并行(同时)处理请求?

对于可能需要一段时间的 HTTP 请求,请使用 Laravel 的 job 结构将请求作为作业发送,并使用内置队列或第三方服务提供商来处理作业。Laravel不执行并行请求,因此创建了job

您的问题类似于以下线程:
处理对同一网址的多个发布请求 拉拉维尔 5

接口文档:
https://laravel.com/docs/5.1/queues#configuration