最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

setTimeout是安排跨几天任务的正确选项吗?

IT培训 admin 12浏览 0评论

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是安排跨几天任务的正确选项吗?

我正在创建一个用户管理系统。主持人可以选择在特定天数内屏蔽用户。收到阻止请求后,用户的禁用属性在数据库中设置为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上)可以运行查询并执行更新。
发布评论

评论列表 (0)

  1. 暂无评论