我有一个客户端发送需要较长处理时间的请求,客户端以 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 如预期的那样。
但是随后页面停止,直到睡眠结束我才得到任何服务。看起来我的连接正在等待相同的php-fpm 进程完成
我正在使用 php-fpm 运行 nginx,知道为什么会发生这种情况吗?
编辑:
经过更多调查,我发现这种行为的原因是我有一个活动会话(来自 facebook SDK),当我在 LongWork.php 上销毁会话时:
<?php
session_destroy(); // Session was halting the client from accessing another page
fastcgi_finish_request();
sleep(1000); //Simulate long computation time
?>
你能反思一下这个解决方案吗?
我应该做一些不同于session_destroy()
编辑:
在 Lachlan Pease 发表评论之后,我换session_destroy
了session_write_close