javascript - 节点服务器上的多个 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);
谢谢!!
解决方案
我们将议程用于一个相当大的策略游戏后端,如果节点应用程序崩溃等,它会提供持久性的好处。
我们将用户 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
});
工作得很好,并提供了不错的防止崩溃的保护。也许值得考虑。
推荐阅读
- powershell - Powershell删除具有特定名称的子文件夹
- oracle - 在 PARALLEL() 中绑定变量以提供优化查询执行的提示
- javascript - 无法清除文件输入
- twilio - 使用 Twilio 发送短信
- git - git cherry-pick:手动接受“我们的”或“他们的”冲突文件中的帅哥
- node.js - Express JS 自定义高水位线
- c# - 我应该如何阅读键盘输入以在 WPF 中创建 2D 游戏?
- sql - 多值……不能用于 WHERE 或 HAVING
- python - 如何在 sklearn 中使用带有自定义估计器的交叉验证?
- flyway - Flyway - 当架构的版本比最新的可用迁移更新时如何解决问题