Php 来自同一客户端的异步请求处理

Php 来自同一客户端的异步请求处理,php,asynchronous,nginx,networking,Php,Asynchronous,Nginx,Networking,我正在使用Docker在本地测试应用程序。它使用nginx和php-fpm。您可以看到nginx配置 我想在第一个请求进入时创建一个锁文件,并在第一个请求处理过程中为后续请求抛出一个错误。但是,当发送第二个请求时,在同一浏览器中使用第二个选项卡或窗口时,我无法测试该行为 作为对我的控制器的一个简单测试,我放了一个sleep(5);返回“你好” 当我在本地访问应用程序时,它工作正常,但如果我从同一浏览器访问页面,我将始终等待处理完成。例如,如果我打开了四个窗口: 铬(正常) 铬(正常) 铬(隐姓埋

我正在使用Docker在本地测试应用程序。它使用nginx和php-fpm。您可以看到nginx配置

我想在第一个请求进入时创建一个锁文件,并在第一个请求处理过程中为后续请求抛出一个错误。但是,当发送第二个请求时,在同一浏览器中使用第二个选项卡或窗口时,我无法测试该行为

作为对我的控制器的一个简单测试,我放了一个
sleep(5);返回“你好”

当我在本地访问应用程序时,它工作正常,但如果我从同一浏览器访问页面,我将始终等待处理完成。例如,如果我打开了四个窗口:

  • 铬(正常)
  • 铬(正常)
  • 铬(隐姓埋名)
  • 火狐
  • 我转到有睡眠的页面,在大约相同的时间触发请求,然后1、3和4将在5秒后完成,但2将等待1完成,需要10秒


    看起来,同一浏览器将打开到同一端口的连接,该端口将在第二个请求中忙碌5秒钟。是否可以更改此行为,以便异步处理所有请求?这似乎是因为其他三个请求是异步处理的,但我不知道为什么来自同一浏览器的请求不是这样。

    为什么要限制用户?(也许还有别的办法)。您是否将php fpm配置为处理多个子进程(~150)?这只是为了防止多次处理(在本例中,这是一个相当繁重的操作)。PHP FPM被配置为允许多个子进程,我认为,“代码> PM =动态< /代码>和<代码> PM.Max子=4 < /Cord>可以考虑运行作业队列(如果操作繁重),并且可以跟踪它是否被处理?当然,这将是一个选项来添加消息队列系统。它可以将作业排队等待处理,并在第一个作业被接受后丢弃队列中的所有作业,直到作业完成。。。但对于这个案子,我认为这太过分了。现在我最感兴趣的是,为什么来自同一个客户端浏览器的请求与来自不同浏览器的请求处理方式不同。