您好我刚刚学习了Meteor并开发了一款多人游戏。出于测试目的,我部署到免费服务器,每晚我们与一些朋友一起玩游戏,一般是20个在线人。但是,网站不时崩溃,没有数据进出。它冻结了。我检查了客户端日志和服务器日志,但没有任何内容。当我刷新页面时,它会在加载模板上冻结。
我在装载屏幕上使用铁路由器:
Router.configure({
layoutTemplate: 'main',
notFoundTemplate: 'notFound',
loadingTemplate: 'loading'
});
Router.route('/loading', {
template : 'loading'
});
Router.route('/', {
template : 'home',
waitOn: function() {
return [Meteor.subscribe('chat'),Meteor.subscribe('games'),Meteor.subscribe('users')];
},
data : function(){
return {
chat : Chat.find({},{sort: {createdAt: 1}}),
games : Games.find({},{sort: {createdAt: -1}}),
users : Meteor.users.find({},{sort : {"status.online":-1}})
}
}
});
我不知道这个问题。有时它会在主页面上冻结,有时会在游戏页面上冻结。对于游戏页面,我正在简化我的代码以供您理解。
游戏中有两个级别:白天和黑夜。它首先点击游戏创建者,早上开始倒计时。倒计时结束时,夜晚以相应的倒计时开始。它会继续循环直到游戏结束。在早上结束时,有一些游戏的计算,然后它切换到夜晚。夜也一样。
对于倒计时目的,我使用带有光纤的setTimeOut()函数。
Meteor.methods({
startGame : function(id){
//some other code here
//....
//set timestamp of the end date
var currentDate = new Date();
console.log("currentDate: "+currentDate);
if(night){ var interval = durationNight;}
else{ var interval = durationMorning;}
console.log("interval: "+interval);
var endDate = currentDate.setSeconds(currentDate.getSeconds() + interval);
console.log("endDate: "+endDate);
Games.update({"_id" : id}, {$set : {"endTime" : endDate}});
endLevelInternal[id] = setTimeout(function () {
// // completed
Fiber(function() {
console.log(id +' countdown completed');
endLevelFlag[id] = true;
if(endLevelFlag[id]){
endLevelFlag[id] = false;
Meteor.call('endLevel', id, function(){
endLevelFlag[id] = true;
});
}
}).run();
}, interval*1000);
},
endLevel : function(){
//some other code here
//...
//
if(!finished){
Meteor.call('startGame', id);
}
}
});
Template.game.events({
'click .startGame' : function(evt, template){
var flag = true;
if(flag){
flag = false;
Meteor.call('startGame', template.data._id, function(){
flag = true;
});
}
}
});
我不确定问题是由于服务器代码还是由于免费服务器(RAM或CPU)的限制。
答案 0 :(得分:1)
我建议您查看Meteor日志,或者在生产就绪的其他平台上进行部署。 一种选择是使用Meteor Up的AWS或DigitalOcean。
答案 1 :(得分:0)
对于那些有同样问题的人。我刚刚将我的应用程序从免费服务器部署到Modulus,现在一切正常。所以它必须与Meteor免费服务器有关。