Symfony 2 长 http 请求锁定所有其他操作,尝试关闭会话锁定但不起作用


Symfony 2 long http request locking all other actions, tried to close session lock but doesn't work?

嗨,我正在使用symfony2进行一些长时间的API调用处理例如,此调用大约需要 20 分钟才能完成

$response = simplexml_load_file($apicall);

问题是每当我在另一个选项卡中打开任何其他操作时。它基本上必须等到 20 分钟完成才能加载结果。我什么都试过了。我知道这可能与会话锁定有关,但我尝试使用

$session = $this->get('session'); 
$session->save();

还有

session_write_close();

但似乎没有任何效果。我尝试在 API 调用之前和 API 调用之后关闭会话。有谁知道我该怎么办?这已经2天了。

这不是特定于Symfony2 - 这就是php和会话的工作方式。要验证这一点,您可以尝试在私有窗口或其他浏览器中调用另一个操作(以确保它是不同的会话),而您的长 api 调用仍处于挂起状态 - 此请求应该可以毫无问题地处理(如果只有 CPU 可用)。

有几种方法可以解决这个问题,但据我所知,没有快速简便的解决方案。我的建议是在另一个进程中启动您的长 api 调用(因此它不会锁定会话)并执行另一个操作来检查您的原始任务是否已完成 - 如果是,则返回结果。

你可以检查一下这个以获得一些灵感

请注意,关闭会话不会帮助您,因为在向服务器发出新请求时,将启动新会话。