Socket.io聊天应用程序显示检测到EventEmitter内存泄漏。 添加了11位听众。 使用emitter.setMaxListeners()

我使用socket.ionode.js加上mysql的私人聊天应用程序,当我使用socket.on('example', function(data){...}); 它在这里抛出这样的错误代码。

  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)); }) }); }); 

以下链接有解释。 https://nodejs.org/docs/latest/api/events.html#events_emitter_setmaxlisteners_n

默认情况下,如果为特定事件添加了10多个侦听器,EventEmitters将会打印一个警告。 这是一个有用的默认值,有助于查找内存泄漏。 显然,并不是所有的事件都只限于10个听众。 emitter.setMaxListeners()方法允许为这个特定的EventEmitter实例修改限制。 该值可以设置为无穷大(或0),以指示无限数量的听众。“

你可以使用这样的东西。

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