我试图建立一个任务系统,用户可以接受或不接受任务,如果在X分钟后它没有被接受,它将被停用。这是一个很好的方法吗,它能够每天处理10K任务吗?
<?php
$mission_id = htmlspecialchars($_POST["mission_id"]));
$user = $_SESSION["user"];
// Verify that user is same as mission agent
$verify = $conn->prepare("SELECT agent FROM missions WHERE id = ? AND active = 0 ORDER BY id limit 1");
$verify->bindParam(1, $user);
$verify->execute();
$verify = $verify->fetch(PDO::FETCH_ASSOC);
if($verify["agent"] == $user) {
unset($verify);
// Do time code.
ignore_user_abort(true);
set_time_limit(300);
$time = 0;
while(time < 300) {
sleep(15);
time += 15;
// check if mission was accepted
$verify = $conn->prepare("SELECT accepted FROM missions WHERE id = ? ORDER BY id LIMIT 1");
$verify->bindParam(1, $mission_id);
$verify->execute();
$verify = $verify->fetch(PDO::FETCH_ASSOC);
if($verify["accepted"] == 0) { // not accepted
unset($verify);
// Inactivate mission
$inactivate = $conn->prepare("UPDATE missions SET active = 0 WHERE id = ?");
$inactivate->bindParam(1, $id);
$inactivate->execute();
unset($inactivate);
}
else {
break;
}
}
}
else {
header("location: logout.php");
// Log user out
}
?>
答案 0 :(得分:1)
使用适用于这些类型情况的mysql Create Event功能。可以将它们视为计划存储过程(尽可能复杂),以非常灵活的重复方式进行激活。
此功能用于取消cron
,尤其是在仅进行数据库操作时。
在我写的Answer中可以看到它的高级视图。
答案 1 :(得分:0)
我会使用过期日期时间戳并设置它 未来17分钟,当你创造任务时
如果他们不采取行动。它会自动过期 如果他们这样做..将过期记录更新为9999-12-31
不使用有效/无效。只需使用当前时间来完成所有活动任务。
没有事件需要。没有crontab。没有额外的代码