小编nod*_*00b的帖子

Node.js + Socket.io超出最大调用堆栈大小

对于我的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)

javascript node.js socket.io

11
推荐指数
3
解决办法
1万
查看次数

标签 统计

javascript ×1

node.js ×1

socket.io ×1