延迟睡眠时出现问题

时间:2020-05-24 01:36:19

标签: php redis


我的用户与另一个系统中的某些帐户相关。
我需要与单个帐户相关的用户在浏览器中工作/打开窗口时在系统查询之间有延迟。
我正在使用redis来保持查询之间的超时,我的应用程序是在yii2框架上编写的。

例如:
我有两个与单个帐户相关的用户,延迟应为5秒。因此流程应该是这样的:如果第一个用户同时打开4个窗口,则最后一个窗口应该延迟20秒,如果第二个用户同时打开1个窗口,他应该延迟25秒。

这是延迟计算代码:

// <!-- Calculating timeout
  /** @var Connection $redis */
  $redis = Yii::$app->redis;
  $redisTimeoutKey = "account:" . $user->account->id;

  $delay = 5;
  $timeout = $redis->get($redisTimeoutKey);
  $toSleep = $timeout - time();
  if ($toSleep > 0) {
    $redis->set($redisTimeoutKey, $timeout + $delay);
    sleep($toSleep);
  } else {
    $redis->set($redisTimeoutKey, time() + $delay);
  }
  // -->
  // request to the system here

我对单个用户的计算正确,但是第二个用户看不到最后的延迟计算。到底发生了什么事?

0 个答案:

没有答案
相关问题