首页 > 解决方案 > 节点服务器上的多个 setInterval 计时器

问题描述

我的应用程序是一个用户有 30 分钟完成的游戏......节点后端

每次用户开始游戏时,服务器端都会触发一个 setInterval 函数……一旦倒计时 30 分钟,我就会清除 Interval。

如何确保每个 setInterval 对特定用户都是唯一的,并且每次新用户开始游戏时不会覆盖 setInterval 变量?(或者每次我清除时都会清除所有 setInterval)。似乎我可能需要为每个开始游戏的新用户创建一个唯一的“间隔”变量?

每次新用户开始游戏时都会触发以下代码

 let secondsLeft = 300000;
      let interval = setInterval(() => {
        secondsLeft -= 1000;

        if (secondsLeft === 0) {
          console.log("now exit");
          clearInterval(interval);
        }
      }, 10000);

谢谢!!

标签: javascriptnode.jssetinterval

解决方案


我们将议程用于一个相当大的策略游戏后端,如果节点应用程序崩溃等,它会提供持久性的好处。

我们将用户 ID 合并到作业名称中,然后安排作业以及要处理的数据在确定的时间运行,指定要执行的处理程序。

然后处理程序将运行该作业并执行相关任务。

// create a unique jobname
const jobName = `${player.id}|${constants.events.game.createBuilding}`;
// define a job to run with handler
services.scheduler.define(jobName, checkCreateBuildingComplete);
// schedule it to run and pass the data 
services.scheduler.schedule(at.toISOString(), jobName, {
   id: id,
   instance: instance,
   started: when
});

工作得很好,并提供了不错的防止崩溃的保护。也许值得考虑。


推荐阅读