【发布时间】: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 中的代码