一尘不染

同时请求PHP脚本

php

如果PHP引擎已经在服务器上执行脚本的过程中,其他同时向同一脚本发出的浏览器请求又会如何?

  • 请求会排队吗?
  • 他们会被忽略吗?
  • 每个请求都会有自己的脚本实例吗?
  • 还有其他可能性吗?

阅读 311

收藏
2020-05-26

共1个答案

一尘不染

根据服务器的配置,服务器通常可以同时处理 数百个请求 -如果使用Apache,则
MaxClients
配置选项就是这样:

MaxClients指令设置了将同时服务的请求数的限制。
任何超出MaxClients 限制的连接尝试 通常都会排队,最多可以排队一个基于ListenBacklog指令的数目。
一旦在另一个请求结束时释放了子进程,则将为连接提供服务。

两个客户端请求同一页面的事实不是问题。

因此:

请求会排队吗?

没有 除非:

  • 某处有一些 锁定 -例如,如果两个请求来自同一客户端,并且您正在 PHP 中使用 基于文件的会话 ,则可能发生:在执行脚本时,该会话被“锁定”,意味着服务器/客户端将必须等到第一个请求完成 (并且文件已解锁 )后,才能使用该文件为第二个用户打开会话。
  • 请求来自相同的客户端和相同的浏览器;在这种情况下,即使没有服务器端产生这种行为,大多数浏览器也会将请求排队。
  • MaxClients当前活动的进程不止这些-请参阅Apache手册中的引言。

他们会被忽略吗?

不:这意味着只有一个用户可以同时使用一个网站; 这不是很好吗?

如果是这样,如果您同时按下F5以查看是否有人回答,我将无法发布此答案!
(嗯,SO不是用PHP编写的,但是原理是相同的)

还有其他可能性吗?

是的^^

编辑OP和注释后进行编辑:

每个请求都会有自己的脚本实例吗?

没有“ 脚本实例 ” 这样的东西:简单地说,向脚本发出请求的情况是:

  • Web服务器会分叉 另一个进程 来处理请求 (通常出于性能原因,这些分叉是预先进行的,但这没有任何改变)
  • 该过程从磁盘读取PHP脚本
    • 多个进程可以同时执行此操作 :文件读取没有锁定
    • 文件被载入内存; 在每个进程的不同内存块中
  • 内存中的PHP文件被“ 编译 ”为操作码-仍在内存中
  • 这些操作码仍被执行-仍来自属于响应您请求的进程的内存块

实际上,您可以让两个用户向同一个PHP脚本 (或所有都包含同一个PHP文件的不同PHP脚本)
发送请求;绝对不是问题,或者我曾经使用的网站都无法正常工作!

2020-05-26