1

是否有类似会话 ID 的东西可以防止同一会话同时具有多个请求/线程?它是如何工作的?

我的应用程序的一个控制器类的方法中有一个循环,该循环等待某些操作(检查数据库)。

我需要看代码,下面是方法里面的代码摘录:

// Times in hundredths of seconds.
$timestamp = number_format(microtime(TRUE), 2, '', '');
$closing_time = $timestamp + ($auditorium_lot_timeout * 100);

// Loop until time's up.
do
{
  usleep(250000); // Sleep 250ms to unload the CPU.
  if (Model_Event::count_new_bids())
  {
    // Etc, etc, etc...
    // Change closing time to wait 10 seconds more.
  }
} while (number_format(microtime(true), 2, '', '') < $closing_time);

// After time's up, continue with closing the bids definitely.
// Perform some more actions.

此摘录所属的方法是由 AJAX 请求的。它的目的是在拍卖中关闭出价,但在关闭前等待几秒钟,以便有机会进行最后一次出价。为此,它会循环预先配置的时间量(如 30 秒),并且在循环时,整个应用程序无法接收来自同一用户的任何其他请求。这是为什么?这很难阻止我,因为该用户是现场拍卖的运营商/拍卖师,并且必须在他触发此循环时向未在线参与(但在真实礼堂中呈现)的用户发送“投标”请求。

更新: JS 请求代码由CanJS 模型抽象。

4

1 回答 1

1

发生这种情况是因为如果某些请求仍然使用它,内置会话机制会锁定会话文件。

因此,您可能的解决方案是通过以下方式以长寿代码发布会话session_write_close()

PS:哦,还没有看到@chris 有这样的评论。作为一个理由,我放了这个链接并不是偷答案,证明我之前回答过类似的问题:https ://stackoverflow.com/a/6405685/251311

于 2012-05-08T03:34:07.983 回答