Node.js 递归使用socket.pipe时MaxListenerSexceedawaring
在我的Node.js 递归使用socket.pipe时MaxListenerSexceedawaring,node.js,sockets,recursion,memory-leaks,Node.js,Sockets,Recursion,Memory Leaks,在我的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() + '\n\r')
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() + '\n\r')
socket.pipe(socket)
setTimeout(writer, 1000)
}
writer()
});
server.listen(commonConfig.TCP_PORT, commonConfig.TCP_ADDR);
但是,我收到以下警告:
(节点:4497)MaxListenerSexceed矮化:检测到可能的EventEmitter内存泄漏。添加了11个终端侦听器。使用emitter.setMaxListeners()增加限制
(节点:4497)MaxListenerSexceed矮化:检测到可能的事件发射器内存泄漏。添加了11个完成侦听器。使用emitter.setMaxListeners()增加限制
(节点:4497)MaxListenerSexceed矮化:检测到可能的事件发射器内存泄漏。添加了11个未管道侦听器。使用emitter.setMaxListeners()增加限制
(节点:4497)MaxListenerSexceed矮化:检测到可能的事件发射器内存泄漏。添加了11个漏侦听器。使用emitter.setMaxListeners()增加限制
(节点:4497)MaxListenerSexceed矮化:检测到可能的事件发射器内存泄漏。增加了11个数据侦听器。使用emitter.setMaxListeners()增加限制
(节点:4497)MaxListenerSexceed矮化:检测到可能的事件发射器内存泄漏。添加了11个错误侦听器。使用emitter.setMaxListeners()增加限制
(节点:4497)MaxListenerSexceed矮化:检测到可能的事件发射器内存泄漏。增加了11位亲密的听众。使用emitter.setMaxListeners()增加限制
造成这些问题的原因是什么?我如何在不破坏功能的情况下解决这些问题?最近,我遇到了一个类似的问题,即管道导致max listeners警告。我没有使用事件侦听器,而是严格地使用管道资源。当我添加太多可写管道以接收来自同一源的数据时,例如
sourcePipe.pipe(writeablepipe)
,nodejs会发出警告
使用--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:\WebstormProjects\ffmpeg-streamer\sockets\mse.js:83:33)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at L:\WebstormProjects\ffmpeg-streamer\node_modules\socket.io\lib\socket.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(可写)代码>
我被这个问题难住了,因为我知道这不是因为我有任何未处理的侦听器导致内存泄漏。我认为,既然我们已经做了尽职调查,我们有理由提高最大侦听器限制
在我的源代码管道上,我添加了一些代码mp4frag.setMaxListeners(20)代码>。现在,当我超过这个数字时,我会得到警告
MaxListenerSexceed矮化:检测到可能的EventEmitter内存泄漏。添加了21个终端侦听器。使用emitter.setMaxListeners()增加限制
,这表示正在使用我的设置值20