我花了很长时间阅读如何解决我的问题,但找不到解决方案。
我正在使用 symfony,当用户调用某个操作时,我需要执行很长时间的流程。请求完成后我可以处理数据吗?目的是使用 jQuery 从客户端启动轮询过程,并等待该过程完成以重定向到另一个操作。
现在,我使用 ContainerAwareCommand 执行此操作,但它会等到后台进程完成。
请问你能帮我吗?
提前致谢。
最佳答案
是的,在将响应发送给用户后,可以在 Symfony 中执行一些后台处理。
您需要为 kernel.terminate 编写一个监听器事件。 并在回调中定义长时间运行的流程。
请注意以下几点:
- 如果响应以编码的 gzip 格式发送,则此技术不起作用。因此,您应该强制 apache/nginx 不使用 gzip 来响应此特定响应。
- 在此请求期间设置任何 session 数据都非常复杂,因为只有在长时间运行的进程完成后才会设置 session 。这意味着,您需要找到 Flashbag 消息的替代方案。
关于php - 在symfony中执行长时间后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46106059/