Symfony不提供并发请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony不提供并发请求相关的知识,希望对你有一定的参考价值。
我的问题是我在使用Apache / 2.4.6(CentOS)php / 5.6.31 mysql 5.7.19的远程机器上运行的Symfony应用程序无法处理并发请求。这意味着在同时要求两个不同的页面时。第一个必须在第二个可以渲染之前完成。
我在同一台服务器上使用普通的Php编写了另一个站点,它可以同时渲染尽可能多的页面(它使用不推荐的mysql连接而不是像Doctrine那样的pdo)。
那说我做了以下测试:我已经插入了睡眠(3);在我的DefaultController。我要求该页面同时请求另一个页面。请参阅以下两个分析器:
- 第1页正常加载时间为782ms
- 正常加载时间是108ms
正如您所看到的,Symfony的Http防火墙正在加载第二页的所有时间。我的猜测(可能是愚蠢的)是第一个动作保持数据库连接,并且只有在它完成之后它才会让它去其他请求使用它。特别是与Doctrine使用PDO连接有关的事情。
顺便说一句,我已经阅读过帮助和文章,如: - What is the Symfony firewall doing that takes so long? - Why is constructing PDO connection slow? - https://www.drupal.org/node/1064342
附:我试过在apache配置中同时使用app.php和app_dev.php没有改变。坚持app_dev.php所以我可以拥有探查器。使用Symfony的内置服务器的本地开发具有相同的结果
对于在PHP中打开的相同会话,您不能有2个并发请求,因此当您使用防火墙时,Symfony会锁定用户会话,直到您释放它为止,不允许其他页面呈现。
关闭会话后,您将释放锁定:
$session->save();
这有一些影响,之后您无法更新会话属性。
会话管理:https://symfony.com/doc/current/components/http_foundation/sessions.html
如果您有多个具有不同会话的并发用户,PHP将同时处理该请求。
以上是关于Symfony不提供并发请求的主要内容,如果未能解决你的问题,请参考以下文章
全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段