【问题标题】:Symfony2 parallel processingSymfony2 并行处理
【发布时间】:2011-12-20 04:20:42
【问题描述】:

我偶然发现了一个有趣的问题。我正在使用 Symfony2。简化的问题如下。有两个动作,每个动作在 routing.yml 中都有一个路径。第一个动作是这样的:

return new \Symfony\Component\HttpFoundation\Response("first");

第二个动作是这样的:

$start = time();
while(time()-$start < 25);
return new \Symfony\Component\HttpFoundation\Response("second");

第二个动作循环运行 25 秒然后返回。

我调用第二个动作:domain.com/second(当然加载需要时间),同时我打开另一个浏览器窗口并输入:domain.com/first。这应该在眨眼之间给我结果,但是,即使是第一个动作也要等到第二个动作完成,他们会在同一时刻给我结果。这在开发和生产模式中都会发生。我想这两个进程应该自己运行。如果不是第一个动作,而是调用一个纯 PHP 脚本(不是 Symfony),它会立即返回而无需等待。此外,如果我在不同的浏览器中运行第一个和第二个操作,我不必等待第一个操作加载。

什么可能导致问题?上面提到的问题很容易理解,但是,如果解决了这个问题,我原来的更复杂的任务也可以工作。

感谢您的帮助:大卫

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    默认情况下 ($_SESSION) PHP 会话存储在文件中。当建立连接并调用session_start 时,用户会话文件将打开并锁定。

    因此,在解锁会话之前,无法处理同一用户/会话的其他连接。

    这可能(不一定)是您遇到的情况。

    查看http://00f.net/2011/01/19/thoughts-on-php-sessions/http://konrness.com/php5/how-to-prevent-blocking-php-requests/ 了解更详细的运行情况

    【讨论】:

    • 非常感谢!会话是问题的根源。 session_write_close() 解决了。
    猜你喜欢
    • 2017-01-26
    • 2017-01-27
    • 1970-01-01
    • 2014-12-03
    • 2019-09-16
    • 2023-03-31
    • 2015-04-10
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多