meteor收集更新后的服务器端计时器
我目前正在开发一个简单的实时多人游戏,我一直坚持使用定时器逻辑 当一个游戏中有足够的玩家时,游戏的状态设置为“已启动”,从那里我想启动一个10秒计时器,并向所有客户端显示它 我的想法是使用集合挂钩并在集合更新后调用setTimeout。但我真的不知道怎么做,也不知道这是否是最好的解决方案meteor收集更新后的服务器端计时器,meteor,timer,meteor-collections,meteor-collection-hooks,Meteor,Timer,Meteor Collections,Meteor Collection Hooks,我目前正在开发一个简单的实时多人游戏,我一直坚持使用定时器逻辑 当一个游戏中有足够的玩家时,游戏的状态设置为“已启动”,从那里我想启动一个10秒计时器,并向所有客户端显示它 我的想法是使用集合挂钩并在集合更新后调用setTimeout。但我真的不知道怎么做,也不知道这是否是最好的解决方案 也许我应该使用cron而不是计时器 我将使用以下逻辑: 集合上的before.update hook更新状态以开始使用 在钩子中为玩家足够的日期设置日期时间=>将此数据保存在游戏集合中 Game.before
也许我应该使用cron而不是计时器 我将使用以下逻辑:
- 集合上的before.update hook更新状态以开始使用
- 在钩子中为玩家足够的日期设置日期时间=>将此数据保存在游戏集合中
Game.before.update(function (userId, doc, fieldNames, modifier, options) { if (modifier && modifier.$set && modifier.$set.nb_of_players > 10) { modifier.$set.status = "Started"; modifier.$set.startingTime = new Date(); } });
- 使用助手动态计算要在客户端上显示的时间,这里是反应式时间显示的基本工作示例,您需要改进以获得倒计时:
Template.Home.helpers({ time: function () { return Template.instance().date.get(); }, }); Template.Home.onCreated(function () { var self = Template.instance(); self.date = new ReactiveVar(); Meteor.setInterval(function () { self.date.set(new Date()); }, 1); });
- 使用setTimeout在10秒后实际执行某些操作-这应该在设置游戏开始后调用。在自动运行中检查值,或在Meteor.call的回调函数中使用:
我还建议使用来实际操作日期和时间Meteor.setTimeout(function(){ Meteor.call("launchAction", {data:data}, function (error, result) { if (error){ console.error(error); } else { } }); }, 10);