PHP会话_write_close没有在托管服务器上同时执行并行请求

PHP会话_write_close没有在托管服务器上同时执行并行请求,php,ajax,Php,Ajax,我用ajax发送了几个请求(例如100个)。 我希望在服务器端(PHP)上并行处理这些耗时的请求。 因此,我将在执行耗时请求之前关闭PHP端的会话 if (session_status() == PHP_SESSION_NONE) { session_start(); } ob_start(); ignore_user_abort(true); session_write_close(); header("Content-Encoding: none"); header("Content

我用ajax发送了几个请求(例如100个)。 我希望在服务器端(PHP)上并行处理这些耗时的请求。 因此,我将在执行耗时请求之前关闭PHP端的会话

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
ob_start();
ignore_user_abort(true);
session_write_close();
header("Content-Encoding: none");
header("Content-Length: 0");
header("Connection: close");
ob_end_flush();
flush();
// time consuming request
...
这在localhost中运行得非常好,但在托管服务器上,它就像我没有关闭会话一样:我只有6个请求同时工作。 您知道什么可以解释本地主机和托管服务器之间的这种行为差异吗?如何让这些请求在托管服务器上并行运行?
谢谢

可能发生的情况是,服务器配置了一个(如果是共享主机提供商,则可能有内存会话存储,以避免繁重而昂贵的磁盘I/O)。这意味着
session\u write\u close
的行为可能并不总是您所期望的


如果您想并行执行多个作业,我建议您使用队列,例如,并避免在请求中使用会话存储。AJAX脚本会将作业细节推送到队列中,在命令行中运行的工作脚本会将这些作业从队列中拉出来并进行处理。对于worker,您可以使用类似于或重复出现的cronjob。

您在localhost和宿主服务器中使用什么PHP版本?为什么要关闭会话来控制并行请求?为什么不在后台使用队列服务来控制流程?如果您的问题是多个请求延迟,那么创建一个队列系统来逐个处理请求,并在逐个请求处理后,通过推送通知为您的用户发送消息,或者更新会话。我在localhost中运行PHP5.4.3,在hosting Server中运行PHP5.4.45。我确实在使用共享托管,但是如果我在托管网站上检查phpinfo,“session.save_handler属性”设置为“files”。知道我应该检查哪个配置来知道我应该从
session\u write\u close
中看到什么行为吗?我刚刚测试了一个解决方法:我从requester.php文件中删除了关闭会话的代码,并创建了一个requesterProxy.php文件,该文件将通过curl调用requester.php,超时时间非常短(
curl\u setopt)($ch,CURL\u OPT\u TIMEOUT\u MS,10)
)。我对requesterProxy.php而不是requester.php进行Ajax调用。我不知道这是否是一个非常干净的解决方案,但它使我能够在宿主服务器上并行执行100个请求。