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

标签 javascript mysql node.js express socket.io

我正在使用 socket.ionode.js 加上 mysql 用于私有(private)聊天应用程序,当我使用 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

By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. This is a useful default that helps finding memory leaks. Obviously, not all events should be limited to just 10 listeners. The emitter.setMaxListeners() method allows the limit to be modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) for to indicate an unlimited number of listeners."

你可以使用这样的东西。

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

关于javascript - Socket.io Chat 应用程序显示检测到 EventEmitter 内存泄漏。添加了 11 个听众。使用 emitter.setMaxListeners(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35062570/

相关文章:

mysql - 使用WITH子句乘以列

php - AVG 和 COUNT 函数在 SQL 查询中没有给出正确的结果

如果 Typescript 文件有任何错误,则不应生成 JavaScript 文件

javascript - 使用 jQuery.click() 覆盖 MooTools 事件

php - 如何使用 PHP 正确从数据库获取标志值?

Node.js Elastic Beanstalk 在重负载下拒绝连接 (ECONNRESET)

node.js - 部分人可以在 sails 中访问本地人吗?为什么不?

javascript - 为什么 JavaScript 中的递归似乎比 for 循环慢得多?

javascript - 回发前如何进行验证?

javascript - 如何在 dropzone 中引发 "removedfile"事件之前显示确认消息?