我使用的是Nginx 1.4.4和PHP 5.5.6。我正在进行长轮询请求。问题是,如果我取消通过Ajax发送的HTTP请求,请求仍在处理中(它们不会停止)。我在文件末尾使用PHP mail()函数进行了测试,邮件还在继续,文件没有停止)。
我很担心,因为我认为这可能会导致服务器崩溃,因为高负载的未关闭的请求。是的,我尝试过ignore_user_abort(false);
,但没有做任何更改。有没有可能我应该在Nginx中改变一些东西?
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
发布于 2013-11-28 17:38:59
在这些长时间运行的请求中,您到底在做什么?如果您正在执行的操作导致FastCGI进程等待某些系统调用,例如等待数据库返回结果,则中止的HTTP客户端连接不会导致此调用中断。如果我没记错的话,ignore_user_abort(false)
的作用只是在它试图向(现已丢失的)连接输出某些内容时立即中止。该脚本在等待系统调用时不会写入任何输出。
如果可能,您应该将长时间运行的脚本正在执行的任务拆分成较小的块,并在处理它们之间检查连接状态。如果连接终止,请确保脚本终止:
while (!$done_yet) {
if(connection_status() != CONNECTION_NORMAL) {
break;
}
do_more_work();
}
如果你愿意,你可以在PHP文档中找到更多关于connection handling的信息。
https://stackoverflow.com/questions/20251224
复制相似问题