我很长时间都在阅读如何解决我的问题,但我找不到解决方案。
我正在使用symfony,当用户调用一个动作时,我需要很长时间才能执行。请求完成后我可以处理数据吗?目的是使用jQuery从客户端启动一个轮询进程,并等待进程完成以重定向到另一个操作。
现在,我正在使用ContainerAwareCommand,但它会等到后台进程完成。
拜托,你能帮助我吗?
提前致谢。
答案 0 :(得分:1)
是的,在将响应发送给用户后,可以在Symfony中执行一些后台处理。
您需要为kernel.terminate事件编写一个监听器。 并在回调中定义长时间运行的进程。
请注意以下几点:
答案 1 :(得分:0)
对于队列,例如RabbitMQ或Redis,这是一个很好的例子。在上传每个文件时将消息放入队列。一个或多个PHP daemons读出队列,处理每个文件,并更新用户的状态(例如,更新数据库中的行)。
这使您可以在与Web请求分开的服务器上运行处理并轻松扩展。如果你需要做什么允许,你可以使用队列将处理分解为多个并发任务。