Node.js + - Sockel.io Maximum call stack size exceeded

Für meine Knoten-Applikation, ich habe einen server (app.js) unter Debian sowohl für html-und websocket-Daten mithilfe von socket.io auf meinem client (index.html). Ich bin versucht, einen turn-basierte HTML5-multiplayer-Spiel.

Nach Durchführung einer Reihe von erfolgreichen Daten-übertragungen mit sockel.emit()/io.emit() und socket.auf(), mein server abstürzt, auf einem sockel.emit () - Aufruf mit dem Fehler

"Ereignisse.js:72

werfe er; //nicht Behandelte "Fehler" - Ereignis

RangeError: Maximum call stack size exceeded".

Ich habe schon ein paar sockel.on() event-Listener, mit jeweils mit einer anderen Funktion in das Spiel (z.B. roll_dice, end_turn, ready_to_play, etc.).

Habe ich versucht, die Erforschung des Problems (gefunden eine Menge Diskussion über async-Schleifen), aber nicht in der Lage war zu finden, wie die Lösungen zu meinem eigenen code. Ich legte relevante Quelle hier. Sie können auch alle anzeigen der Quelle auf meinem github unter: https://github.com/sjmoon0/gameofdeath

index.html

JS:

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;
  	incrementLoadBar(data.stuff[0].numChar);
  	console.log(id +" was chosen");
  	$('#'+id).hide();
  });


//-------------------Gameplay functions
  socket.on('start_gameplay',function(nonsense){
  	showChanges(nonsense);
	$('#wait').hide();
	$('#gamespace').show();
	draw_c();
	socket.emit('ready_to_play',chosenCharacter);
  });

  socket.on('take_turn',function(updatedBoard){
  	showChanges(updatedBoard);
  	if(updatedBoard.currPlayer==chosenCharacter){
  		promptUser(updatedBoard);
  	}
  });

  socket.on('roll_result',function(rollResult){
  	promptUser(rollResult);
  });

                  ...
                  

	$('#rollDiceButton').click(function(){
		socket.emit('roll_dice',chosenCharacter);
	});

	$('#okCloseButton').click(function(){
		socket.emit('end_turn',chosenCharacter);
	});

	$('.thumbnail').click(function(something){
		socket.emit('player_chosen', something.target.id);
		            ...
	});

app.js

JS:

var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');
var url = require('url');

...

app.listen(8001);

function handler (req, res) {
...
}
console.log("~Server Running~");


io.on('connection', function (socket) {
  console.log("A Client connected");
  ...
  socket.emit('load', { user: uID });
  io.emit('client_counter',numClients);

  if(numClients==4){
      gameStarted=true;
      console.log("Game started!");
      io.emit('game_started',"The Game has begun!");
    }
    else if(numClients>4){
      numClients--;
      delete allClients[allClients.indexOf(socket)];
    }

  socket.on('check_game_started', function (data) {
    socket.emit('last_client_loaded', gameStarted);
    console.log(data);
    if(gameStarted){
      console.log("Last Player Loaded!");
    }
  });

  socket.on('player_chosen', function(cp){
    ...
    socket.emit('set_user', cp);
    ...
    io.emit('disable_player_choice',{'stuff':[{'chara':cp,'numChar':numCharChosen}]});
    if(numCharChosen==4){
      io.emit('start_gameplay', boardUpdate);
    }
  });

  socket.on('disconnect',function(){
    console.log("A client disconnected");
    numClients--;
    delete allClients[allClients.indexOf(socket)];
    io.emit('client_disconnect',"We've lost another comrade!");
  });

  socket.on('ready_to_play',function(characterThatIsReadyToPlay){
    io.emit('take_turn',boardUpdate);
  });

  socket.on('roll_dice', function(characterThatRolledDice){
    var temp=generateRollResult(characterThatRolledDice)
    socket.emit('roll_result',temp);
  });

  socket.on('end_turn',function(characterThatEndedTurn){
    io.emit('take_turn',nextUpdate(characterThatEndedTurn));
  });
});

Bitte sei sanft, ich habe gerade angefangen mit Node.js vor etwa einer Woche. Danke!

  • Kannst du die vollständige Fehlermeldung ?
  • Bearbeitet die Frage zu gehören, ist es: "Ereignisse.js:72 werfen-äh; //nicht Behandelte "Fehler" - Ereignis RangeError: Maximum call stack size exceeded".
InformationsquelleAutor noden00b | 2014-12-09
Schreibe einen Kommentar