首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Socket.io聊天应用程序显示检测到EventEmitter内存泄漏。11名听众补充说。使用emitter.setMaxListeners()

Socket.io聊天应用程序显示检测到EventEmitter内存泄漏。11名听众补充说。使用emitter.setMaxListeners()
EN

Stack Overflow用户
提问于 2016-01-28 13:15:44
回答 1查看 1.2K关注 0票数 7

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

代码语言:javascript
复制
 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)

我在服务器端的代码:-

代码语言:javascript
复制
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);
    });

在客户端:-

代码语言:javascript
复制
 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));
                })
            });
        });
EN

回答 1

Stack Overflow用户

发布于 2016-02-29 15:39:47

下面的链接有解释。n

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

你可以用这样的东西。

代码语言:javascript
复制
require('events').EventEmitter.defaultMaxListeners = Infinity;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35062570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档