在我制作所有硬处理数据之前,我想向最终用户返回一个响应。
我想简单地从用户那里得到一个请求,返回一个响应,它可以是一个简单的 json,
并且用户将看到数据,但在我的服务器端,我将继续我的其余处理,调用分析,更改数据库等。
类似这样的想法: 发送http响应后继续处理php
在我制作所有硬处理数据之前,我想向最终用户返回一个响应。
我想简单地从用户那里得到一个请求,返回一个响应,它可以是一个简单的 json,
并且用户将看到数据,但在我的服务器端,我将继续我的其余处理,调用分析,更改数据库等。
类似这样的想法: 发送http响应后继续处理php
对于较重的任务,您应该使用kernel.terminate
Event。因此,在发送响应后,将执行此事件中的任何任务。这就是 swiftmailer 内存假脱机的工作方式。
这可能是一个迟到的答案,但上述场景完美地利用了队列。使用像LeezyPheanstalkBundle这样的库将使beanstalkd的使用更加容易。
会发生什么:
1. 接收用户请求
2. 将作业添加到队列(非常快)
3. 返回服务器响应
4. 工作人员检索作业并处理它。
查看 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 条记录并输出它们。
这样,您可以在页面上显示进度条或其他动画...