我有一个可以在xls中生成原始导出的应用程序。
问题在于xls生成可能非常长,超过了超时时间。
我已经检查过,但我的查询不是罪魁祸首(常规查询需要<2s),但是xls生成非常长(对于几千行,我在单元格中放置了不同的颜色,有条件地显示数据。) )。
我正在考虑在CLI中运行的命令,而不会出现超时问题。
我不能直接使用它,因为要生成的数据必须由用户调用(没有cli访问权限)。
所以我想到了calling the command in my controller 用户可以选择表单中的参数,发送表单,然后在控制器中将参数传递给执行繁重任务的命令。
我的问题是:在这种情况下,该命令是在CLI上下文中调用的(CLI超时= 0)还是在应用程序(Web)上下文中调用(超时的<50s)?在后一种情况下,这将是无用的,对于任何其他解决我的问题的方法的建议,我将不胜感激。
答案 0 :(得分:1)
这是消息队列的教科书箱。
推荐使用RabbitMq,并且易于与Symfony一起使用。
您将有一个生产者,该生产者将生成一条消息并将其放入队列中。这将在您的控制器中完成。
数据库查询和工作表生成应放置在使用者中(命令在后台运行,从队列中选择消息并进行处理)。
工作表准备好后,将其保存为文件,并可能使用唯一的ID将其记录在数据库中。
这个步伐听起来很困难,但它非常简单,无论如何您都应该学习它:)
一个问题正在向用户显示结果。最简单的方法是每X秒刷新一次浏览器。其他选择包括使用Ajax轮询以及来自服务器的基于Websocket的通知。