代码之家  ›  专栏  ›  技术社区  ›  Overdose

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

  •  0
  • Overdose  · 技术社区  · 6 年前

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

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

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

    我在考虑命令wich在CLI中运行,没有超时问题。

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

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

    我的问题是:在这种情况下,命令是在CLI上下文中调用(CLI timeout=0)还是在应用程序(Web)上下文中调用(timeout<50s)?在后一种情况下,这将是无用的,我将非常感谢任何关于解决我的问题的替代方法的建议。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Padam87    6 年前

    这是一个用于消息队列的教科书案例。

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

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

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

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

    这听起来很难,但很简单,你无论如何都应该学会:)

    一个问题是向用户显示结果。最简单的方法是每X秒刷新一次浏览器。其他选择包括使用ajax进行轮询,以及从服务器发出基于websocket的通知。