返回响应后的symfony代码


symfony code after returning response

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

我只想从用户那里得到一个请求,返回一个响应,它可以是一个简单的json,

然后用户会看到数据,但在我的服务器端,我会继续我剩下的处理,调用分析,更改DB和其他。

类似这样的想法:发送http响应后继续处理php

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

这可能是一个迟来的答案,但上述场景完美地利用了Queues。使用LeezyPheanstalkBundle这样的库将使beanstalkd的使用更加容易。

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

我发现Symfony的消息总线是一个很好的解决方案。

您可以直接将消息发送给工作人员或使用交通工具,例如@Nagy Wesley建议的队列。

查看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响应

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

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

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