返回响应后的symfony代码

时间:2013-08-18 08:26:13

标签: php symfony

在我制作所有硬处理数据之前,我想让最终用户返回一个响应。

我想简单地收到用户的请求, 返回一个响应,它可能是一个简单的json,

并且用户将看到数据,但在我的服务器端,我将继续进行剩余的处理,调用分析,更改数据库等。

像这样的想法: continue processing php after sending http response

3 个答案:

答案 0 :(得分:3)

对于较重的任务,您应该使用kernel.terminate Event。因此,在发送响应之后,将执行此事件中的任何任务。这就是swiftmailer内存假脱机的工作方式。

答案 1 :(得分:0)

这可能是一个较晚的答案,但是上述场景很好地利用了队列。 使用LeezyPheanstalkBundle之类的库将使beanstalkd的使用更加容易。

会发生什么:
 1.接收用户请求
 2.将作业添加到队列(非常快)
 3.返回服务器响应
 4.工人检索作业并进行处理。

答案 2 :(得分:-2)

查看StreamedResponse:

$response = new StreamedResponse();
$response->setCallback(function () {
    echo 'Hello World';
    flush();
    sleep(2);
    echo 'Hello World';
    flush();
});
$response->send();

在此处阅读更多内容:http://symfony.com/doc/current/components/http_foundation/introduction.html#streaming-a-response

虽然这种方法在某些情况下具有简单性和实用性,但它并不是网页中最佳的用户体验。 HTML页面只会在脚本末尾完全加载,这可能会导致视觉烦恼,缺乏Javascript支持,CSS渲染不完整等等......

如果您想获得最佳视觉体验,可以加载一个空页面,然后进行并行ajax调用以进行处理。即。每个AJAX请求将处理5条记录并输出它们。

通过这种方式,您可以在页面上显示进度条或其他动画...