首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Nginx + PHP:在取消请求时停止进程

Nginx + PHP:在取消请求时停止进程
EN

Stack Overflow用户
提问于 2013-11-28 03:19:18
回答 1查看 4.7K关注 0票数 18

我使用的是Nginx 1.4.4和PHP 5.5.6。我正在进行长轮询请求。问题是,如果我取消通过Ajax发送的HTTP请求,请求仍在处理中(它们不会停止)。我在文件末尾使用PHP mail()函数进行了测试,邮件还在继续,文件没有停止)。

我很担心,因为我认为这可能会导致服务器崩溃,因为高负载的未关闭的请求。是的,我尝试过ignore_user_abort(false);,但没有做任何更改。有没有可能我应该在Nginx中改变一些东西?

代码语言:javascript
复制
  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;  
  }
EN

回答 1

Stack Overflow用户

发布于 2013-11-28 17:38:59

在这些长时间运行的请求中,您到底在做什么?如果您正在执行的操作导致FastCGI进程等待某些系统调用,例如等待数据库返回结果,则中止的HTTP客户端连接不会导致此调用中断。如果我没记错的话,ignore_user_abort(false)的作用只是在它试图向(现已丢失的)连接输出某些内容时立即中止。该脚本在等待系统调用时不会写入任何输出。

如果可能,您应该将长时间运行的脚本正在执行的任务拆分成较小的块,并在处理它们之间检查连接状态。如果连接终止,请确保脚本终止:

代码语言:javascript
复制
while (!$done_yet) {
    if(connection_status() != CONNECTION_NORMAL) {
        break;
    }
    do_more_work();
}

如果你愿意,你可以在PHP文档中找到更多关于connection handling的信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20251224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档