Php 如何使用fastcgi_finish_request()的示例

Php 如何使用fastcgi_finish_request()的示例,php,fastcgi,Php,Fastcgi,有人能举一个简单的例子说明如何使用fastcgi\u finish\u request()函数吗? 我在谷歌上搜索了一下,但只找到了一些关于它的一般性提及,一些人说他们成功地使用了它,但我找不到一个带有代码的示例 例如,我有一个PHP对象。要向浏览器发送响应,我生成HTML,然后 通过getResult()返回它。然后回应结果 像这样: $obj = new controller(); echo $o->getResult(); 假设我想利用这种优化技术将结果发送到浏览器,然后完成一些可

有人能举一个简单的例子说明如何使用
fastcgi\u finish\u request()
函数吗? 我在谷歌上搜索了一下,但只找到了一些关于它的一般性提及,一些人说他们成功地使用了它,但我找不到一个带有代码的示例

例如,我有一个PHP对象。要向浏览器发送响应,我生成HTML,然后 通过
getResult()
返回它。然后回应结果

像这样:

$obj = new controller();
echo $o->getResult();
假设我想利用这种优化技术将结果发送到浏览器,然后完成一些可能很长的过程,比如连接到一些API,比如Facebook API

我该怎么做呢?我知道基本上我可以调用
fastcgi_finish_request()
然后继续执行php脚本

我只需要看看示例代码,我还没有足够的智慧自己去理解它

我知道基本上我可以调用
fastcgi_finish_request()
然后继续执行PHP脚本

是的,这就是你要做的

$obj = new controller();
echo $o->getResult();
fastcgi_finish_request();
do_facebook_thing();
要让自己相信它是有效的,请执行以下操作:

echo "Test";
fastcgi_finish_request();
sleep(10);

如果删除第二行,您将看到浏览器必须等待10秒。

我知道它需要php作为fastcgi和php fpm运行。我已经这样设置了,使用PHP5.3作为fastcgi,lighttpd作为web服务器。所以它可以用来代替异步队列来做“后台工作”(例如发送电子邮件)?@ThomasDecaux,可以,但在任务运行时,您仍然会保留web进程。最终,使用一个与web进程完全分离的适当队列来阻止页面服务不需要的操作是值得的。当然,我同意这是最懒的解决方案^^^,但这是一个很好的技巧(我正在使用它进行日志记录,如果出现错误,我会将错误消息发送给用户,然后向程序员发送电子邮件)。要使您的脚本与apache兼容,请先添加函数_exists()。嗨。我已经尝试了您的示例,效果不错。但是!如果我快速刷新页面(每秒几次),然后我可以看到最后一次查询花费的时间太长(可能是3到6秒)。这是什么原因?nginx工作者,等等?