当前位置: 首页 > 面试题库 >

同时请求PHP脚本

长孙鸿振
2023-03-14
问题内容

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

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

问题答案:

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

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

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

因此:

请求会排队吗?

没有 除非:

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

他们会被忽略吗?

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

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

还有其他可能性吗?

是的^^

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

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

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

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

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



 类似资料:
  • 我对在PHP中一次提交多个请求持怀疑态度。我有一个php函数,比如insertOrder()来将详细信息插入数据库表并向用户发送通知。详细信息将从另一个来源自动发布到此功能。这些是insertOrder()中的步骤 启动Mysql事务 从OrderID=123的数据库表中选择订单计数(来自post数据) 如果COUNT=0,则插入数据库表并发送通知 如果不是0,则更新顺序 提交 问题在于,有时系统

  • 我有一个关于邮递员的共享收藏。当我在共享集合中运行请求时,它失败并显示以下错误: 评估预先请求脚本时出错:错误:意外的令牌 我已经用几个请求试过了,最简单的请求是对“http://localhost:8000/v1/resource”的GET请求,没有参数、授权、头、正文或请求前脚本,仍然会出现上述错误。 检查邮递员的控制台时,我看到以下错误: JSONError:意外令牌' 和上面的那个吻合。

  • 这是在收到以db为单位的帖子列表后发送带有每个帖子链接数据的POST请求的代码。 在使用每个链接请求帖子后,从回复中提取playerCount并将其更新到每个帖子。 我在这段代码中使用Resttemplate,但有一个问题需要花费太长时间。 所以我想把这个代码改为一次发送一个请求,并在所有请求完成后更新每个帖子。 我怎样才能把这个代码转换成我想要的? 我将使用此代码作为计划任务。

  • 问题内容: 我正在尝试通过COM端口发送AT命令,但只重新发送了相同的命令。 日志: 16:19:21.910 [main]调试SerialConnections.M234Serial-创建实例。 16:19:21.974 [main]调试SerialConnections.M234Serial-发送请求:AT ^ SCFG? 16:19:23.976 [EventThread COM55]调试S

  • 我正在用Application/JSON数据发送原始POST请求到邮递员服务器。我需要使用这个JSON对象,并在请求前脚本中追加一些数据。但是我只能找到如何访问环境变量,而不能请求主体。有人知道吗?谢了!

  • 当通过PHP发出curl请求时,curl得到“无法连接到主机”。当我转储curl信息时,不是请求服务器的ip。 这在我的测试服务器上运行良好,但在生产环境中不起作用。在生产服务器上,这是我得到的响应: 大堆 7. 无法连接到主机数组(23){["url"]=