对于我的Node应用程序,我在Debian上运行了一个服务器(app.js),使用socket.io向我的客户端(index.html)提供html和websocket数据.我正在尝试制作基于回合制的HTML5多人游戏.
在使用socket.emit()/ io.emit()和socket.on()执行大量成功的数据传输后,我的服务器在socket.emit()调用时崩溃,错误为
"events.js:72
throw er; //未处理的'错误'事件
RangeError:超出最大调用堆栈大小".
我有很多socket.on()事件监听器,每个都处理游戏中的不同功能(例如roll_dice,end_turn,ready_to_play等).
我试图研究这个问题(发现很多关于异步循环的讨论),但是无法找到如何将解决方案应用到我自己的代码中.我在这里附上相关来源.您还可以在我的github上查看所有源代码:https://github.com/sjmoon0/gameofdeath
的index.html
var socket = io.connect('http://131.178.15.173',{'forceNew':true});
...
//----------------Initialization and Menu functions-----------
socket.on('load', function (data) {
console.log(data);
clientID=data;
socket.emit('check_game_started', { un: clientID });
socket.on('last_client_loaded', function(hasStarted){
console.log("Has game started? :"+hasStarted);
if(hasStarted==true){
$('#choosecharacter').show();
}
});
});
socket.on('client_disconnect', function (data) {
console.log(data);
});
socket.on('client_counter', function (data) {
if(data<5){
console.log(data);
incrementLoadBar(data);
allowedInGame=true;
}
if(!allowedInGame){
...
}
});
socket.on('game_started', function (data) {
console.log(data);
$('#welcome').hide();
$('#choosecharacter').show();
});
socket.on('set_user', function(characterName){
chosenCharacter=characterName;
});
socket.on('disable_player_choice', function(data){
var id=data.stuff[0].chara; …Run Code Online (Sandbox Code Playgroud)