出现了以下问题。有一个按钮,当单击该按钮时,会向控制器发送 AJAX 请求。它执行的任务通常需要很长时间。
...
$process = new Process("...");
$process->start();
...
进程异步启动的事实start是可以理解的。但问题是:如何监控进程的状态,如何知道它已经完成?另外,我想防止用户发送这样的请求,重新加载页面,并再次发送相同的请求,即如果进程已经在后台运行,则使按钮不可用。您还需要以某种方式发现该过程已结束并取消阻止该按钮。实际上,如何实现呢?
可选: 此外,最好从外部控制这些进程,例如,在单独的页面上跟踪它们的状态,如果需要,可以切断这些进程。在 symfony 中是否可以从另一个控制器访问在一个控制器中运行的进程?
恐怕你会误用这个组件,暗示 Symfony 会异步启动一个不附加到内核的进程,但事实并非如此。
文档说这个
那些。异步启动的进程将一直持续到您发送请求的那一刻。注意这一点,这很重要。
那些。这不是传统意义上的异步过程,例如在 JS 中,但它允许您解决一些任务,在此期间您可以做其他事情。
如果您想运行异步执行任务的进程,那么您当然应该使用队列。以 RabbitMQ 为例。好吧,同时您可以通过主管控制正在运行的进程,例如,但那是另一回事了。