ajax - fastcgi_finish_request 在打开 session 存在时创建挂起连接

标签 ajax nginx session-state php

我有一个客户端发送一个需要很长时间处理的请求,客户端用ajax发送请求。一旦请求在服务器上被接受,客户端就会重定向到另一个页面,这是通过 fastcgi_finish_request 完成的(我正在运行 php-fpm)

长工作.php:

<?php
    fastcgi_finish_request(); 
    sleep(1000); //Simulate long computation time
?>

客户端.js:

$.ajax({
    url: "...",
    data: {},
    success: function() {
        top.location.href="next_page.php" 
    }
});

ajax 被发送,成功回调导致重定向到预期的 next_page.php。

但是随后页面停止,直到 sleep 结束我才得到任何服务。看起来我的连接正在等待 same php-fpm 进程完成

我正在用 php-fpm 运行 nginx,知道为什么会这样吗?

编辑:

经过更多调查,我发现导致此行为的原因是我有一个事件 session (来自 facebook SDK),当我销毁 LongWork.php 上的 session 时:

<?php
    session_destroy(); // Session was halting the client from accessing another page
    fastcgi_finish_request(); 
    sleep(1000); //Simulate long computation time
?>

你能反射(reflection)一下这个解决方案吗?

我应该做一些与 session_destroy() 不同的事情吗?

编辑:

在 Lachlan Pease 评论之后,我将 session_destroy 切换为 session_write_close

最佳答案

问题出在 session 存在上,有关更多详细信息,请参阅问题中的编辑

关于ajax - fastcgi_finish_request 在打开 session 存在时创建挂起连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11758334/

相关文章:

ruby-on-rails - 如何在 ROR 中使用 ActiveScaffold 一次创建多个记录

Jquery AJAX 在 IE9 中不工作

azure - 在 Web 角色中使用 HttpSessionState

asp.net-mvc - MVC.net session 在用户之间混合

Asp.net session 几秒后自动过期

javascript - IE9 和 $(document).ready 失败,除非开发者控制台打开

php - 使用 jquery/ajax 插入 MYSQL DB 500 内部服务器错误

nginx - 如何将nginx配置转换为ingress kubernetes yaml配置?

magento - magento 应用程序的 502 错误网关 nginx

ubuntu - 如何为每个用户配置msmtprc