PHP站点正在等待ajax调用完成

时间:2014-09-04 21:32:41

标签: php process

我有这个PHP网站,它会进行一些重要的ajax调用。它们需要大约8-10秒,并通过cURL请求与许多第三方API进行通信。

当这些ajax调用正在进行时,该网站的其余部分没有响应。不只是这个页面,而是另一个页面上的另一个浏览器选项卡。

我应该检查什么以确保PHP能够分叉多个进程,以便站点不会挂起?

PHP以PHP-fpm

运行
location ~ \.php$ {
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
    fastcgi_buffers 256 64k;
    fastcgi_buffer_size 2400k;
    fastcgi_read_timeout 6000;
    uwsgi_read_timeout 6000;
    include fastcgi_params;
}

nginx有足够的工作程序

user www-data;
worker_processes 16;
pid /var/run/nginx.pid;

events {
   worker_connections 8000;
   multi_accept on;
}

另外,我已经使用sleep()和一个很长的for循环进行了测试。这两个都很好。似乎只是cURL调用外部网站导致了这个问题。

不确定缺少什么。

谢谢!

1 个答案:

答案 0 :(得分:0)

听起来你需要拨打session_write_close

当脚本写入会话时,PHP会锁定会话文件,因此每个页面必须等待该页面才能打开会话(除非您在写入后调用上述函数)。

例如,假设您有一个长时间运行的Ajax进程,该进程在开始时写入会话。如果你没有调用session_write_close告诉PHP你的脚本写完了会话,它会锁定所有其他脚本的会话,直到执行完毕。