为什么Apache不能同时处理多个请求?

nic*_*cks 12 php apache ampps

我安装了AMPPS.

我的Apache服务器不能同时处理多个php请求(例如,如果我localhost/script.php多次调用它们,它们将按连续顺序处理).script.php只包括<?php sleep(10); ?>.

我读到MaxClients指令负责并发访问配置,但我httpd.conf完全没有.

禁用Xdebug并写入session_write_close();脚本的开头不起作用.

当我添加session_start();到文件的开头,我的代码看起来像:

<?php

session_start();
session_write_close();
sleep(10);
phpinfo();

echo "Done";
Run Code Online (Sandbox Code Playgroud)

当发出5个请求时localhost/script.php,最后4个等待第一个请求结束然后同时结束.

请帮我解决这个问题.如果缺少帮助我解决此问题所需的任何信息,请通知我,我将添加它.

小智 23

apcahe肯定可以同时处理多个请求,在你的apache配置中肯定会出现问题.

这取决于您使用的Apache版本及其配置方式,但常见的默认配置使用多个具有多个线程的工作程序来处理同时发出的请求.请参阅http://httpd.apache.org/docs/2.2/mod/worker.html,了解其工作原理.

您面临的原因是:某处存在某种锁定 - 例如,如果两个请求来自同一客户端,并且您在PHP中使用基于文件的会话,则会发生这种情况:正在执行脚本时,会话被"锁定",这意味着服务器/客户端必须等到第一个请求完成(并且文件解锁)才能够使用该文件为第二个用户打开会话.

请求来自同一客户端和相同的浏览器; 在这种情况下,大多数浏览器都会对请求进行排队,即使没有任何服务器端产生此行为.


Vik*_*sek 7

可能是因为会话锁定。当您不需要编辑会话变量时,请将其关闭。

http://php.net/manual/en/function.session-write-close.php


Leo*_*ipe 5

操纵你的会话,写在 script.php 的开头

// manipulate writes, and unlock session file!
session_start();
$_SESSION['admin'] = 1;
$_SESSION['user'] = 'Username';
session_write_close(); // unlock session file, to another script can access

// start your script without php session block
sleep(30); 
echo $_SESSION['user'];

// another script can run without wait this script finish
Run Code Online (Sandbox Code Playgroud)

  • 这正是我所需要的。我正在使用 PHP 流式传输文件,并且流式传输请求阻止我向同一用户发出另一个请求。事实证明,会话阻止我提出另一个请求。 (2认同)