【问题标题】:How to make an async sleep execution in PHP如何在 PHP 中进行异步睡眠执行
【发布时间】:2017-12-27 21:39:31
【问题描述】:

这可以通过 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 命令之前的所有代码,10 秒后,上述代码被触发。 有谁知道我如何做到这一点?

【问题讨论】:

  • 如果你有前端。 id 让 js 在设定的时间间隔内 ping 后端作为保持清醒。如果你真的想要异步 php,你应该研究线程或队列系统。
  • 谢谢,我想我宁愿在迁移到 VPS 后执行此操作,看看我有哪些选项。我想出了下面的方法-尝试了系统和执行程序,但是它们被完全忽略了,没有错误或任何东西,所以我认为我的主机有一种方法可以阻止运行异步操作:$sql =$conn->prepare ("SELECT时间来自用户 WHERE 用户名 = ? 限制 1"); $sql->execute(array($usernametmp)); $oldtime = $sql->fetch(PDO::FETCH_COLUMN); system("php offlinechk.php?oldtime=$oldtime &"); exec("php offlinechk.php?oldtime=$oldtime &"); offlinechk = 帖子 1 中的代码

标签: php mysql sleep


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多