3

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

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

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

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

4

3 回答 3

4

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

于 2013-08-18T09:53:18.273 回答
0

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

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

于 2019-04-24T14:11:18.610 回答
-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 调用来进行处理。IE。每个 AJAX 请求将处理 5 条记录并输出它们。

这样,您可以在页面上显示进度条或其他动画...

于 2013-08-18T08:35:59.173 回答