如何实现投票系统截止日期功能?
How to implement voting system closing date feature?
我正在实施一个 node.js 非实时民意调查创建和投票系统,管理员可以在其中创建民意调查并设置结束日期,然后当该日期到达时系统关闭民意调查,发送订阅用户一封电子邮件,用户不能再投票了。我已经实现了所有其他功能,但我很难在那个日期结束投票。我想到了一些持久的类似 cron 的调度程序,我在其中设置了在既定日期结束投票的工作,但我不知道这是否是最好的方法。你对如何解决这个问题有什么想法吗?谢谢
有两种基本方法 - 进程内和进程外。 In-process比较简单,但是它要求你的主程序是运行。进程外更健壮,因为您可以使用主要功能是可靠地执行计划作业(例如 cron)的系统。
对于 Javascript 中的进程内方法,我建议在启动时,去阅读显示投票仍然开放的投票记录(布尔标志,而不是日期),从中减去当前日期截止日期,并使用 setTimeout
安排一个函数调用到很远的将来(如果差异为负,则立即调用)。该函数可以做任何你需要的事情(发送电子邮件、更新记录等)。它应该做的最后一件事是更新原始记录以指示 "successfully closed"。你希望这个函数是 re-entrant 所以如果你的进程在中途死亡,下次它启动时它仍然会看到过去的结束日期的投票记录,但没有 "successfully closed" 标志,然后重试。
我正在实施一个 node.js 非实时民意调查创建和投票系统,管理员可以在其中创建民意调查并设置结束日期,然后当该日期到达时系统关闭民意调查,发送订阅用户一封电子邮件,用户不能再投票了。我已经实现了所有其他功能,但我很难在那个日期结束投票。我想到了一些持久的类似 cron 的调度程序,我在其中设置了在既定日期结束投票的工作,但我不知道这是否是最好的方法。你对如何解决这个问题有什么想法吗?谢谢
有两种基本方法 - 进程内和进程外。 In-process比较简单,但是它要求你的主程序是运行。进程外更健壮,因为您可以使用主要功能是可靠地执行计划作业(例如 cron)的系统。
对于 Javascript 中的进程内方法,我建议在启动时,去阅读显示投票仍然开放的投票记录(布尔标志,而不是日期),从中减去当前日期截止日期,并使用 setTimeout
安排一个函数调用到很远的将来(如果差异为负,则立即调用)。该函数可以做任何你需要的事情(发送电子邮件、更新记录等)。它应该做的最后一件事是更新原始记录以指示 "successfully closed"。你希望这个函数是 re-entrant 所以如果你的进程在中途死亡,下次它启动时它仍然会看到过去的结束日期的投票记录,但没有 "successfully closed" 标志,然后重试。