gpt4 book ai didi

php - Symfony 不处理并发请求

转载 作者:行者123 更新时间:2023-11-29 01:35:35 25 4
gpt4 key购买 nike

我的问题是我的 Symfony 应用程序在远程机器上运行 Apache/2.4.6 (CentOS) PHP/5.6.31 MySQL 5.7.19 无法处理并发请求。这意味着当同时请求两个不同的页面时。第一个必须在第二个可以呈现之前完成。

我有一个在同一台服务器上的另一个网站,它是用普通的 Php 编写的,它没有问题同时呈现尽可能多的页面(它使用已弃用的 mysql 连接,而不是像 Doctrine 那样的 pdo )

也就是说我做了以下测试:我插入了一个 sleep (3);在我的默认 Controller 。我请求了那个页面,同时请求了另一个页面。请参阅下面的两个分析器:

有 sleep 的页面(称为第一个): Page with sleep (called 1st)没有 sleep 的页面(称为 2nd)。 Page without sleep (called 2nd)

  • 第 1 页的正常加载时间为 782 毫秒
  • 第 2 页的正常加载时间为 108 毫秒

如您所见,Symfony 的 Http 防火墙占用了第二页的所有时间来加载。我的猜测(可能是愚蠢的)是第一个 Action 保持数据库连接,并且只有在它完成它之后才会让其他请求使用它。尤其是与 Doctrine 使用 PDO 连接有关的事情。

顺便说一句,我已经阅读了帮助和文章,例如: - What is the Symfony firewall doing that takes so long? - Why is constructing PDO connection slow? - https://www.drupal.org/node/1064342

P.S. 我已经尝试在 apache 配置中同时使用 app.php 和 app_dev.php,但没有任何改变。坚持 app_dev.php 这样我就可以拥有分析器了。使用 Symfony 内置服务器的本地开发具有相同的结果

最佳答案

在 PHP 中,您不能对同一个打开的 session 有 2 个并发请求。当您使用防火墙时,Symfony 会锁定用户 session ,直到您手动释放它或处理请求为止。

释放 session 锁使用这个:

$session->save();

注意会有一些缺点和影响。保存 session 后,您将无法更新它(更改属性),直到下一个请求到达。

session 管理:https://symfony.com/doc/current/components/http_foundation/sessions.html

session 接口(interface):http://api.symfony.com/4.0/Symfony/Component/HttpFoundation/Session/SessionInterface.html#method_save

注意 2. 如果您有多个并发用户使用不同的 session ,PHP 将同时处理这些请求。

关于php - Symfony 不处理并发请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47911808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com