在Nodejs中为许多用户处理计时器

Handling timers for many users in Nodejs

本文关键字:多用户 处理 计时器 Nodejs      更新时间:2023-09-26

我正在Node/Express中构建一个web应用程序,这样用户就可以设置计时器,以便执行或重复某个任务。我的问题是,如何在截止日期后触发事件,为许多用户设置计时器。我不想在客户端处理此问题,因为用户可以关闭浏览器。一个很好的例子是像pingdom.com这样的服务,它允许您设置计时器并每X分钟向服务器发送一次ping。如何实现这一点?我希望我不会因为问这个问题而得到很多否定,我也不会要求你们给我写代码。我只是想知道一个强有力的策略来解决这个问题。以下是我的想法:

  1. 将结束时间保存在数据库中,并每秒使用cron作业检查一次,看看时间是否到了(在我看来,这不是很好,因为查询和所有计算可能需要超过1秒)

  2. 以某种方式将变量分配给setInterval,并将其存储在全局列表中

如果每个客户端都有自己的计时器,那么你的web应用程序将有一个响应更灵敏的UI,并且你的后端可以更好地扩展。关闭浏览器不会有问题。

  • endtime保存在服务器中的数据库中以解决特定问题
  • 在客户端,从服务器检索endtime,并使用JavaScript创建一个计时器,提醒用户时间已过期
  • 在服务器端,有一个额外的检查,如果答案是通过endtime提交的,则会拒绝答案,以防止客户端作弊