我想返回最终用户一个响应,在我制作所有的硬处理数据之前。
我想简单地从用户那里得到一个请求,返回一个响应,它可以是一个简单的JSON,
然后,用户将看到数据,但在我的服务器端,我将继续我的其余处理,调用分析,更改数据库和其他。
例如:continue processing php after sending http response
我想返回最终用户一个响应,在我制作所有的硬处理数据之前。
我想简单地从用户那里得到一个请求,返回一个响应,它可以是一个简单的JSON,
然后,用户将看到数据,但在我的服务器端,我将继续我的其余处理,调用分析,更改数据库和其他。
例如:continue processing php after sending http response
4条答案
按热度按时间ecfdbz9o1#
对于较重的任务,您应该使用
kernel.terminate
事件。因此,此事件中的任何任务都将在响应发送后执行。这就是swiftmailer内存假脱机的工作方式。shyt4zoc2#
这可能是一个迟来的答案,但上面提到的场景完美地使用了LeezyPheanstalkBundle。使用像LeezyPheanstalkBundle这样的库将使beanstalkd的使用变得容易得多。
发生的是:
1.接收用户请求
2.将作业添加到队列(非常快)
3.返回服务器响应
4.工人检索作业并处理它。
hi3rlvi23#
我发现Symfony的message bus是一个很好的解决方案。
您可以直接将消息发送给worker或使用传输,例如@Nagy Wesley建议的Queue。
06odsfpq4#
查看StreamedResponse:
阅读更多:http://symfony.com/doc/current/components/http_foundation/introduction.html#streaming-a-response
虽然这种方法在某些情况下很简单和有用,但它并不是网页中最好的用户体验。HTML页面只会在脚本结束时完全加载,这可能会导致视觉障碍,缺乏JavaScript支持,不完整的CSS渲染等。
如果你想获得最好的视觉体验,你可以加载一个空页面,然后进行并发的AJAX调用来完成处理。也就是说,每个AJAX请求将处理5个记录并输出它们。
这样你就可以在页面上有一个进度条或其他一些动画。