返回响应后的symfony代码

yacmzcpb  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(150)

我想返回最终用户一个响应,在我制作所有的硬处理数据之前。
我想简单地从用户那里得到一个请求,返回一个响应,它可以是一个简单的JSON,
然后,用户将看到数据,但在我的服务器端,我将继续我的其余处理,调用分析,更改数据库和其他。
例如:continue processing php after sending http response

ecfdbz9o

ecfdbz9o1#

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

shyt4zoc

shyt4zoc2#

这可能是一个迟来的答案,但上面提到的场景完美地使用了LeezyPheanstalkBundle。使用像LeezyPheanstalkBundle这样的库将使beanstalkd的使用变得容易得多。
发生的是:
1.接收用户请求
2.将作业添加到队列(非常快)
3.返回服务器响应
4.工人检索作业并处理它。

hi3rlvi2

hi3rlvi23#

我发现Symfony的message bus是一个很好的解决方案。
您可以直接将消息发送给worker或使用传输,例如@Nagy Wesley建议的Queue。

06odsfpq

06odsfpq4#

查看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个记录并输出它们。
这样你就可以在页面上有一个进度条或其他一些动画。

相关问题