为什么symfony在调用其他控制器时会阻塞?

时间:2017-08-23 00:14:28

标签: symfony

我有两个动作,并且在一个动作中我调用另一个动作但是symfony阻止该呼叫直到第一个(我正在呼叫的那个)完成。因此,由于这个事实我有时间错误。有谁知道可能是什么原因?

enter image description here

行动很简单:

    $url = $this->router->generate(
        'invoice_show',
        [
            'invoiceId' => $invoiceId,
        ],
        UrlGeneratorInterface::ABSOLUTE_URL
    );

    return new Response(
        $this->pdfGenerator->getOutput(
            $url,
            [
                'margin-bottom'       => 3,
                'margin-top'          => 3,
                'margin-left'         => 4,
                'margin-right'        => 4,
                'disable-javascript'  => true,
                'load-error-handling' => 'ignore',
                'cookie'              => $request->cookies->all(),
            ]
        ),
        200,
        [
            'Content-Type'        => 'application/pdf',
            'Content-Disposition' => 'attachment; filename="' . $invoiceId . '.pdf"',
        ]
    );

例外:

  

的Symfony \元器件\过程\异常\ ProcessTimedOutException(代码:   0):进程\" / usr / bin / xvfb-run / usr / bin / wkhtmltopdf --lowquality    - margin-bottom' 3' --margin-left' 4' - margin-right' 4' --margin-top' 3' --disable -javascript - load-error-handling' ignore'   ' http://localhost/invoices/in_1Atlve2rN1gYNyHu4Ixmy8ZI'   ' /var/www/var/cache/dev/snappy/knp_snappy599cffb13836d0.68608376.pdf' \"   超过60秒的超时。在   /var/www/vendor/symfony/symfony/src/Symfony/Component/Process/Process.php:1265

1 个答案:

答案 0 :(得分:0)

根据您使用symfony的会话处理程序,它可能会锁定会话,直到第一个请求完成。 这意味着将阻止所有后续请求以防止在写入会话时出现并发问题(在两个请求中写入相同的会话可能会导致丢失第一次写入)。

例如PDOSessionHandler就属于这种情况。

您可以通过调用控制器中的$request->session->save();来明确关闭会话。

如果您不期待并发问题,例如:如果你根本不写会话,你也可以禁用整个应用程序的会话锁定:

session.handler.pdo:
    class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
    public: false
    arguments:
        - "pgsql:host=%database_host%;port=%database_port%;dbname=%database_name%"
        - db_username: %database_user%
          db_password: %database_password%
          db_table: session
          db_id_col: session_id
          db_data_col: session_value
          db_time_col: session_time
          db_lifetime_col: session_lifetime
          lock_mode: 0