在我的Node.JS
应用中,我需要通过TCP连接递归执行writer
函数。这就是我这样做的方式:
var net = require('net');
const commonConfig = require('../config.common')
var server = net.createServer(function(socket) {
let writer = () => {
socket.write(Date.now() + 'nr')
socket.pipe(socket)
setTimeout(writer, 1000)
}
writer()
});
server.listen(commonConfig.TCP_PORT, commonConfig.TCP_ADDR);
但是,我收到以下警告:
(node:4497) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 end listeners added. Use emitter.setMaxListeners() to increase limit
(node:4497) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 finish listeners added. Use emitter.setMaxListeners() to increase limit
(node:4497) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 unpipe listeners added. Use emitter.setMaxListeners() to increase limit
(node:4497) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 drain listeners added. Use emitter.setMaxListeners() to increase limit
(node:4497) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 data listeners added. Use emitter.setMaxListeners() to increase limit
(node:4497) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4497) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 close listeners added. Use emitter.setMaxListeners() to increase limit
这些是什么原因引起的,我该如何解决这些问题而不破坏我的功能?
我最近遇到了类似的问题,导致最大听众警告。我不是在使用事件听众,而是严格地填写资源。当我添加太多的可写管以从同一源接收数据时,例如sourcePipe.pipe(writablePipe)
时,Nodejs发出警告。
使用启动我的应用程序 - Trace-Warnings 标志提供了更多详细信息,以专门告诉我问题的发生何处,这正是管道发生的代码。node --trace-warnings app.js
。将该标志传递给您的应用程序可能有助于您提供有关问题的更多详细信息。
(node:5676) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 data listeners added. Use emitter.setMaxListeners() to increase limit
at _addListener (events.js:281:19)
at Mp4Frag.addListener (events.js:298:10)
at Mp4Frag.Readable.on (_stream_readable.js:775:35)
at Mp4Frag.Readable.pipe (_stream_readable.js:638:7)
at Socket.socket.on (L:WebstormProjectsffmpeg-streamersocketsmse.js:83:33)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at L:WebstormProjectsffmpeg-streamernode_modulessocket.iolibsocket.js:513:12
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
指向MSE.JS文件的第83行,即mp4frag.pipe(writable);
我对此感到困惑,因为我知道这不是因为我有任何未手持的听众导致记忆泄漏。我想我们有理由增加最大听众的限制,因为我们已经完成了尽职调查。
在源管上,我添加了一些代码 mp4frag.setMaxListeners(20);
。现在,当我超过这个数字时,我会得到警告 MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 21 end listeners added. Use emitter.setMaxListeners() to increase limit
告诉我,我正在使用 20 的设定值。