求助:emitter.setMaxListeners()的问题
发布于 2年前 作者 nomusics 639 次浏览

我使用exBuffer进行的socket数据分包

var exBuffer = new ExBuffer();
exBuffer.on('data', function(data){
    // do code
})
socketCli.on('data', function(data) {
   exBuffer.put(data);
});

在大并发量下,现在会报错

(node) warning: possible EventEmitter memory leak detected. 31 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
    at Socket.EventEmitter.addListener (events.js:175:15)
    at client.connection (/data/node/online/client.js:57:23)
    at EventEmitter.emit (events.js:96:17)
    at proc (/data/node/node_modules/ExBuffer/ExBuffer.js:151:26)
    at put (/data/node/node_modules/ExBuffer/ExBuffer.js:100:9)
    at Socket.client.connection (/data/node/client.js:96:22)
    at Socket.EventEmitter.emit (events.js:96:17)
    at TCP.onread (net.js:396:14)

使用的nodejs的NET建立socket,socket监听到的消息全部交给exBuffer处理进行分包,解决之前出现的粘包问题。 但是现在会报错,提示监听数量达到了最大值,最开始提示10,我设置为30后,现在又开始报错。

2 回复

不是我干的啊,怎么会提交了这么多…

/data/node/online/client.js 57行附近的代码贴出来 从warning信息来看,是对同一个socket无节制通过on注册监听函数,却没有适当注销。

回到顶部