gpt4 book ai didi

node.js - 如何为两个客户调用一次 Meteor 方法?

转载 作者:搜寻专家 更新时间:2023-11-01 00:09:33 25 4
gpt4 key购买 nike

我正在尝试在 meteor 上构建简单的游戏。当两个玩家在游戏中注册时,他们被重定向到游戏页面,并调用服务器方法。该方法简单地用新游戏信息更新 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 会为客户端的每个请求创建一个新的纤程。事实证明,这些方法是同时调用的,并且彼此独立运行。我不知道也许有一种方法可以在一根光纤中运行两个请求)也许这会有所帮助,或者以其他方式解决这个问题,我是新手。任何帮助将不胜感激

最佳答案

注意:我没有尝试这个,但我正在回答,以便您可以进行适当的调整以使其正常工作。

根据您的问题和评论,使用 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
}
});

每当将新记录插入到 Games 集合中时,added 回调就会运行。 id为新插入的游戏id,game为新插入的游戏文件。每当 Games 集合中的现有记录更新时,updated 回调就会运行。 id 是更新后的游戏的id,fields 是游戏文档中唯一新更新的字段。

进一步了解请参阅 meteor 文档:http://docs.meteor.com/#/full/observe_changes

希望对您有所帮助。

关于node.js - 如何为两个客户调用一次 Meteor 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35578978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com