Symfony:在控制器中调用命令以进行长时间的操作

时间:2018-10-31 15:14:03

标签: symfony command-line

我有一个可以在xls中生成原始导出的应用程序。

问题在于xls生成可能非常长,超过了超时时间。

我已经检查过,但我的查询不是罪魁祸首(常规查询需要<2s),但是xls生成非常长(对于几千行,我在单元格中放置了不同的颜色,有条件地显示数据。) )。

我正在考虑在CLI中运行的命令,而不会出现超时问题。

我不能直接使用它,因为要生成的数据必须由用户调用(没有cli访问权限)。

所以我想到了calling the command in my controller 用户可以选择表单中的参数,发送表单,然后在控制器中将参数传递给执行繁重任务的命令。

我的问题是:在这种情况下,该命令是在CLI上下文中调用的(CLI超时= 0)还是在应用程序(Web)上下文中调用(超时的<50s)?在后一种情况下,这将是无用的,对于任何其他解决我的问题的方法的建议,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是消息队列的教科书箱。

推荐使用

RabbitMq,并且易于与Symfony一起使用。

您将有一个生产者,该生产者将生成一条消息并将其放入队列中。这将在您的控制器中完成。

数据库查询和工作表生成应放置在使用者中(命令在后台运行,从队列中选择消息并进行处理)。

工作表准备好后,将其保存为文件,并可能使用唯一的ID将其记录在数据库中。

这个步伐听起来很困难,但它非常简单,无论如何您都应该学习它:)

一个问题正在向用户显示结果。最简单的方法是每X秒刷新一次浏览器。其他选择包括使用Ajax轮询以及来自服务器的基于Websocket的通知。