php - 如何在 PHP 中进行异步 sleep 执行

标签 php mysql sleep

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

$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 秒 sleep 后才执行。我想要的是执行 sleep 命令之前的所有代码,10 秒后,上面的代码被触发。 有人知道我怎样才能实现这一目标吗?

最佳答案

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

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

关于php - 如何在 PHP 中进行异步 sleep 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45244385/

相关文章:

php - 无法使用端口号发出 php curl 请求

php - 单击 php 中的链接(来自数据库)后没有任何显示

php - 统计ID数量

php - 按天获取统计数据 - 日期时间列 - mysql/php

php - isset条件在不同的点击下表现不同

MySQL 到 MSSQL 同步

mysql - MySQL 中的解耦表能提高多少性能?

objective-c - 有没有办法监控 Mac 何时即将进入休眠状态?

java - Wait()、Notify()、计时器和 Jbuttons

SQL、PHP - 关闭 sleep 连接