如何在PHP中执行异步睡眠执行

时间:2017-07-21 18:24:43

标签: php mysql sleep

这可以通过cronjob来完成,但由于我还没有转换到包含相同计划的提供商,我想出了我认为可能的解决方案来实现我的目标,如果不是实际的话更好的解决 范围:这是一个信使系统,您希望在用户注销时让其他用户知晓。这对于用户决定在应用程序中注销的情况很容易完成,但是如果用户wifi关闭,例如,显然应用程序将无法告诉其他用户他不再在线。 每5秒,应用程序检查新消息,它还使用每个用户的当前时间戳更新mysql。所以我认为,如果应用程序每5秒调用一次的PHP脚本检查是否在10秒后调用php脚本时sql表中的时间戳是相同的,那么其他用户将被告知他离线了。 所以这就是我在剧本结尾处所做的:

$sql =$conn->prepare ("SELECT time FROM Users WHERE username = ? limit 1");
$sql->execute(array($usernametmp));  
$oldtime = $sql->fetch(PDO::FETCH_COLUMN);
sleep(10);
$sql =$conn->prepare ("SELECT time FROM Users WHERE username = ? limit 1");
$sql->execute(array($usernametmp));  
$newtime = $sql->fetch(PDO::FETCH_COLUMN);
if ($oldtime == $newtime) 
{
(here´s where the other users are being informed
....

但遗憾的是,整个php脚本中的所有代码在10秒睡眠之后才会被执行。我想要的是睡眠命令之前的所有代码都被执行,10秒后,上面的代码被触发。 有谁知道我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

好的,我提出了一个不错的解决方法:

每次客户端检查新消息时,在mysql表中为此用户添加的新时间戳也会发送到客户端。 时间戳被立即从客户端发送到另一个php脚本,该脚本休眠10秒,然后检查时间戳是否与mysql db中的时间戳相同。如果是这种情况,客户端的状态将更改为脱机,因为在这10秒内,应该更新表中的时间戳 - 除非客户端脱机。