Laravel app并行处理请求

时间:2016-03-13 17:35:39

标签: php ajax http laravel artisan

我正在构建一个Laravel Web应用程序,它可以执行一些长时间运行的查询并使用一对(内部和外部)API。我很难搞清楚为什么我无法并行处理请求。为了解释我的问题,以下是我的系统/问题的高级概述:

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

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

我无法确定这是配置错误的php,artisan,Laravel还是我手上还有其他问题。我用两个简单的路由闭包完成了一些测试:一个只返回一个字符串,另一个在sleep(10)之后返回一个字符串。当我用AJAX调用两者时,在提供长时间运行的请求(睡眠后)之前,即时返回的路由不会返回。

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

1 个答案:

答案 0 :(得分:1)

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

您的问题类似于以下主题:
handle multiple post requests to same url Laravel 5

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