几天任务的正确选项吗?"/>
setTimeout是安排跨几天任务的正确选项吗?
我正在创建一个用户管理系统。主持人可以选择在特定天数内屏蔽用户。收到阻止请求后,用户的禁用属性在数据库中设置为true。经过指定的持续时间后,该值将设置回false。持续时间可能在1到10天之间。 setTimeout()是正确的选择吗?如果同时运行多个用户,是否会占用大量CPU?
这是我程序中的功能。完整的程序使用express作为服务器和mongoose与mongodb数据库进行交互。
function disableUser(req,res) {
let username = req.body.username;
let app = req.body.app;
let duration = req.body.duration;
let reason = req.body.reason;
User.find({username:username}).then((result) => {
let user = result[0];
user.disabled = true;
user.save().then((user) => {
disableMail(app, user.email, duration, reason); //send mail to user
// schedule a task to set user.disabled to false after the duration
}, (err) => {
res.status(500).send(err);
});
}, (err) => {
res.status(500).send(err);
});
}
回答如下:由于某些原因,使用setTimeout可能不切实际。首先,您会很费力,这是正确的,特别是如果您有很多被阻止的用户。其次,它不能在服务器重新启动后幸存下来,这可能是由于您正在推送新代码而引起的。
如果您要执行一些自动化的后台任务,请考虑:
- 您可能想检查用户是否在服务器端阻止所有API调用和表单提交。这可能是您对写调用进行的常规安全性/权限检查的一部分。
- 每当拒绝被禁止的用户的API调用时,您都需要在UI中进行一些错误处理。
- 您可能希望某些后台任务每分钟执行一次,并检查被阻止的用户,并在适当的时候使禁令过期。 chron类型的作业,石英(如果是Java)或类似的作业(如果在Node上)可以运行查询并执行更新。
更多推荐
setTimeout是安排跨几天任务的正确选项吗?
本文发布于:2024-05-07 11:17:20,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
发布评论