2016-01-28 6 views
5

मैं निजी चैट एप्लिकेशन के लिए socket.io और node.js प्लस mysql का उपयोग कर रहा हूं और जब मैं socket.on('example', function(data){...}); का उपयोग करता हूं तो यह यहां त्रुटि कोड फेंकता है।सॉकेट.ओ चैट एप्लिकेशन इवेंटइमीटर मेमोरी लीक का पता चला। 11 श्रोताओं ने कहा। Emitter.setMaxListeners का उपयोग करें()

node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. 
Trace 
    at PoolConnection.EventEmitter.addListener (events.js:175:15) 
    at io.on.eventConnection (/Applications/MAMP/htdocs/mysite/node/server.js:72:15) 
    at Ping.onOperationComplete [as _callback] (/Applications/MAMP/htdocs/mysite/node/node_modules/mysql/lib/Pool.js:99:5) 
    at Ping.Sequence.end (/Applications/MAMP/htdocs/mysite/node/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 
    at Ping.Sequence.OkPacket (/Applications/MAMP/htdocs/mysite/node/node_modules/mysql/lib/protocol/sequences/Sequence.js:105:8) 
    at Protocol._parsePacket (/Applications/MAMP/htdocs/mysite/node/node_modules/mysql/lib/protocol/Protocol.js:280:23) 
    at Parser.write (/Applications/MAMP/htdocs/mysite/node/node_modules/mysql/lib/protocol/Parser.js:73:12) 
    at Protocol.write (/Applications/MAMP/htdocs/mysite/node/node_modules/mysql/lib/protocol/Protocol.js:39:16) 
    at Socket.Connection.connect (/Applications/MAMP/htdocs/mysite/node/node_modules/mysql/lib/Connection.js:96:28) 
    at Socket.EventEmitter.emit (events.js:96:17) 

और सर्वर साइड में मेरी कोड: -

function fetchMessages(data){ 
     var sql = "SELECT `msg_descr`,`msg_to` FROM `message` WHERE (msg_to="+data[0].iChatUserId+" AND msg_from="+data[1]+") OR (msg_to="+data[1]+" AND msg_from="+data[0].iChatUserId+") ORDER BY msg_created_date DESC LIMIT 20"; 
     eventConnection(sql, function(callback, rows){ 
      if(callback){ 
       users[data[1]].emit('Release Msg', {messages:rows, selfId:data[0].iChatUserId}); 
      } 
     }); 
    } 

    //when a user is actibe 
    socket.on('load Message', function(data, callback){ 
     var repsondMsg = fetchMessages(data); 
    }); 

ग्राहक के पक्ष में: -

chatList.click(function(){ 
     var __this = $(this); 
      targetData = []; 
      __userData = fetchUserData(__this); 
      myId = myImage.data('myid'); 
      targetData.push(__userData, myId); 
      socket.emit('load Message', targetData); 
      checkExistance(targetData); 
    }); 

    socket.on('Release Msg', function(data){ 
      $.each(data.messages, function(){ 
       $.each(this, function(k,v){ 
        $('*[data-ichatid="'+data.selfId+'"]').children('.body_cht_box_ind').children('#chats').append($('<li>').text(v)); 
       }) 
      }); 
     }); 

उत्तर

0

नीचे दिए गए लिंक व्याख्या है। https://nodejs.org/docs/latest/api/events.html#events_emitter_setmaxlisteners_n

डिफ़ॉल्ट EventEmitters तक एक चेतावनी मुद्रित करता है, तो 10 से अधिक श्रोताओं एक विशेष घटना के लिए जोड़ रहे हैं होगा। यह एक उपयोगी डिफ़ॉल्ट है जो मेमोरी लीक खोजने में मदद करता है। जाहिर है, सभी घटनाओं को केवल 10 श्रोताओं तक सीमित नहीं होना चाहिए। Emitter.setMaxListeners() विधि इस विशिष्ट EventEmitter उदाहरण के लिए सीमा को संशोधित करने की अनुमति देती है। मूल्य इन्फिनिटी (या 0) करने के लिए सेट किया जा सकता श्रोताओं के एक असीमित संख्या से संकेत मिलता है के लिए। "

आप संक्षेप में प्रस्तुत करने के लिए क्या लिंक से कहते हैं कुछ इस तरह उपयोग कर सकते हैं।

require('events').EventEmitter.defaultMaxListeners = Infinity; 
+1

यह सामान्य रूप से बेहतर है बस इसे चिपकाएं। अगर लिंक बदलता है, तो आपका जवाब बेकार हो जाएगा। – Tavo

संबंधित मुद्दे