我试图在流星上建立简单的游戏。当两个玩家在游戏中注册时,他们被重定向到游戏页面,并调用服务器方法。该方法只是用新游戏信息更新mongo集合并启动间隔,这将检查游戏结束时间:
//on client
Template.Game.onCreated(function() {
Meteor.call('game', gameId, function(error) {
if (error) {
console.log(error);
}
});
});
//on server
Meteor.methods({
'game': function(gameId) {
var game = Games.findOne({
_id: gameId
});
if (game) {
//here update collection...
var interval = Meteor.setInterval(function() {
var now = Date.now();
if (now >= game.endTime) {
Meteor.clearInterval(interval);
}
}, 1000);
}
}
});
但问题是该方法运行两次并创建两个间隔。我知道Meteor为客户提出的每个请求创建了一条新光纤。事实证明,方法同时被调用,并且彼此独立地运行。我不知道是否有办法在一根光纤中运行两个请求)也许这会有所帮助,或者以其他方式解决这个问题,我是新手。任何帮助将不胜感激
答案 0 :(得分:0)
注意:我没有尝试过,但我正在回答,以便您可以进行适当调整以使其正常工作。
根据您的问题和评论,最好使用observeChanges
。在games.js
集合文件或您声明Games
集合的文件中,
var handle = Games.find({}).observeChanges({
added: function (id, game) {
//if first round is started immediately then create a setInterval here.
},
changed: function (id, fields) {
//whenever round information is updated, you can set interval for the next round (if next round is available) here.
// you can use "fields" parameter passed to this function
}
});
只要将新记录插入added
集合,就会运行Games
回调。 id
是新插入的游戏ID,game
是新插入的游戏文档。
只要在updated
集合中更新现有记录,就会运行Games
回调。 id
是已更新游戏的ID,fields
是仅游戏文档中新更新的字段。
有关进一步理解,请参阅流星文档:http://docs.meteor.com/#/full/observe_changes
希望它有所帮助。
答案 1 :(得分:-1)
我认为而不是创建模板上的调用方法 登录后执行操作 在客户端,用户将登录 在服务器端,用户进行身份验证并找到其他用户,这是免费的。因此,在找到用户之后,您可以创建游戏并将游戏传递给游戏数据到模板。