मेरे नोड एप्लिकेशन के लिए, मेरे पास एक क्लाइंट (app.js) है जो मेरे क्लाइंट (index.html) में socket.io का उपयोग करके HTML और websocket डेटा दोनों की सेवा करने वाले डेबियन पर चल रहा है। । मैं एक बारी आधारित एचटीएमएल 5 मल्टीप्लेयर गेम बनाने का प्रयास कर रहा हूं।Node.js + Socket.io अधिकतम कॉल स्टैक आकार
socket.emit का उपयोग कर सफल डेटा प्रसारण के एक नंबर प्रदर्शन करने के बाद()/io.emit() और socket.on(), एक socket.emit पर अपने सर्वर क्रैश हो जाता है() त्रुटि
"की घटनाओं के साथ कहते हैं। जेएस: 72
फेंक एर; // अनचाहे 'त्रुटि' घटना
रेंज त्रुटि: अधिकतम कॉल स्टैक आकार पार हो गया "।
मेरे पास कुछ सॉकेट.ऑन() इवेंट श्रोताओं हैं, प्रत्येक गेम में एक अलग फ़ंक्शन को संभालने के साथ (जैसे 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){
\t console.log("Has game started? :"+hasStarted);
\t if(hasStarted==true){
\t \t $('#choosecharacter').show();
\t }
});
});
socket.on('client_disconnect', function (data) {
console.log(data);
});
socket.on('client_counter', function (data) {
if(data<5){
\t console.log(data);
\t incrementLoadBar(data); \t
\t allowedInGame=true;
}
if(!allowedInGame){
\t ...
}
});
socket.on('game_started', function (data) {
console.log(data);
$('#welcome').hide();
$('#choosecharacter').show();
});
socket.on('set_user', function(characterName){
\t chosenCharacter=characterName;
});
socket.on('disable_player_choice', function(data){
\t var id=data.stuff[0].chara;
\t incrementLoadBar(data.stuff[0].numChar);
\t console.log(id +" was chosen");
\t $('#'+id).hide();
});
//-------------------Gameplay functions
socket.on('start_gameplay',function(nonsense){
\t showChanges(nonsense);
\t $('#wait').hide();
\t $('#gamespace').show();
\t draw_c();
\t socket.emit('ready_to_play',chosenCharacter);
});
socket.on('take_turn',function(updatedBoard){
\t showChanges(updatedBoard);
\t if(updatedBoard.currPlayer==chosenCharacter){
\t \t promptUser(updatedBoard);
\t }
});
socket.on('roll_result',function(rollResult){
\t promptUser(rollResult);
});
...
\t $('#rollDiceButton').click(function(){
\t \t socket.emit('roll_dice',chosenCharacter);
\t });
\t $('#okCloseButton').click(function(){
\t \t socket.emit('end_turn',chosenCharacter);
\t });
\t $('.thumbnail').click(function(something){
\t \t socket.emit('player_chosen', something.target.id);
\t \t ...
\t });
app.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));
});
});
कृपया कोमल हो, मैंने अभी एक सप्ताह के बारे में Node.js का उपयोग करना शुरू कर दिया पहले। धन्यवाद!
क्या आप पूर्ण त्रुटि संदेश पोस्ट कर सकते हैं? – nha
इसे शामिल करने के लिए संपादित प्रश्न, यह है: "events.js: 72 फेंक एर; // अनचाहे 'त्रुटि' घटना रेंज त्रुटि: अधिकतम कॉल स्टैक आकार पार हो गया"। – noden00b