是什么导致只有1个并发连接?

时间:2019-06-21 14:38:31

标签: javascript php ajax apache nginx

我有一个PHP网络应用程序。 当同时发生多个AJAX请求时,它们似乎在服务器端排队,就像一次只运行一个进程一样。仅当所有请求都通过一个浏览器完成时,这种情况才会发生。

最奇怪的是,有时它会同时运行(屏幕:XML logic and parsing really shouldn't be used for HTML because it isn't actually a subset of xml),大约10分钟后,它等待一个进程完成,然后才运行另一个进程,一个接一个地完成。一个(屏幕:https://imgur.com/8oDGV8t)。

测试屏幕截图的代码:

sleep(5);
exit();

P.S。当这些AJAX请求排队时,普通的html请求也“在队列中等待”。

1 个答案:

答案 0 :(得分:3)

我认为这很可能与会话管理有关。

发生的事情是新请求等待上一个请求中的会话关闭。

  

这仅是因为访问了会话数据,因此在会话文件上获得了锁定。

您可以通过不首先开始会话来避免这种情况。如果需要会话,则需要在会话启动后立即关闭。如果需要设置$ _SESSION变量,则在关闭会话之前需要此变量。您可以这样操作:

session_start();

$_SESSION['some'] = 'value';
session_write_close(); // From here on out, concurrent requests are no longer blocked

$ _ SESSION变量在关闭会话后仍然可用。

另请参阅:https://codingexplained.com/coding/php/solving-concurrent-request-blocking-in-php