替代方法 运行 NodeJS 上的计时器使用 Socket.IO

Alternative Way Running a Timer on NodeJS Using Socket.IO

我想创建一个提醒应用程序。应该有一个 table 为 'active-reminders' 的数据库。 将有一个函数将:

  1. 确定哪些提醒已到时间
  2. 向客户发送一条消息,告知他们设置的提醒
  3. 正在从数组中删除适当的提醒

我在考虑 运行 这个函数的有效方法,我想到了:

  1. 运行 此函数每隔 1 分钟检查一次到期的提醒
  2. 触发一个 setTimeout,它将向适当的客户发送他的提醒 - 这意味着对于每个提醒都会设置一个 setTimeout,运行在时间到期时立即执行该功能。

我的问题: 有没有更好的方法来实施解决方案? 从列出的方法中,您认为其中一种方法比另一种方法更有效吗?

非常感谢!

如果您的约会在记忆中,请按触发时间对它们进行排序。如果您的约会在数据库中,请确保有一个有效的机制来访问下一个约会以达到其时间。

然后,使用这种高效的排序访问机制,找到最早的约会来触发。如果该时间已经过去,则触发其通知,将其从数据结构中删除并重复。如果该时间尚未过去,请为其预定时间设置一个计时器。当该计时器触发时,从数据结构中删除该事件并通过触发下一个事件并为其设置计时器来重复该过程。

每当您添加新约会时,请检查它的截止时间是否早于您的计时器。如果是这样,请释放您已有的计时器并为新的设置计时器。

每当要删除约会时,您首先检查它是否是下一个要通知的约会。如果是,停止它的计时器并配置下一个事件。

您可以使用四个处理生命周期变化的函数来完成所有这些工作:

addNewEvent(event)        // called when you add a new event to the data
fireEvent(event)          // called when a timer fires to notify of an event
removeEvent(event)        // called when an event is being deleted
configureNextEvent()      // called to configure timer for next event