【问题标题】:setTimeout in restfull service宁静服务中的 setTimeout
【发布时间】:2014-02-06 10:53:48
【问题描述】:

我正在使用 node.js + express 编写服务。 计时器有问题。

我根本不存储任何状态,在我的路线中有 2 个函数。

route.js

var timeOutId;
exports.linkUpRequest = function() {
   // do some request to another user => insert record in db
   ...
   timeOutId = setTimeout(function() {
     //delete request => delete record from db
   }, 1000 * 60 * 60);
   res.send(...);
};


exports.confirm = function() {
   // record will be stored until user explicitly delete it => update that user confirm request
   clearTimeout(timeOutId);
   res.send(...);
};

我知道这是错误的解决方案,因为它是服务器并且许多用户可以访问timeOutId 变量。我的问题是如何处理 REST 服务中的计时器和超时 id。

注意:在 cmets 中,我从模型中调用方法,这也是无状态的。

【问题讨论】:

    标签: javascript node.js rest express timer


    【解决方案1】:

    跟踪所有计时器引用并不容易。您可以做的一件事是针对每个请求在 db 中存储确认状态。确认后,将状态设置为已确认。在定时器结束时删除记录之前检查此状态,如果确认不删除请求。这样您就不会取消已确认请求的计时器,但这些请求不会在超时时被删除。

    【讨论】:

    • 谢谢。但是如果我的服务器由于某种原因出现故障,我会有很大的问题,如何让它安全失效?我的意思是我的计时器将被中止。而且我的记录没有删除。(对不起我的英语,我想你明白我的意思)
    • 您可以安排一个脚本在 x 分钟后运行,以检查您的数据库中是否有过期的请求需要删除。
    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多