gpt4 book ai didi

node.js - 递归使用 socket.pipe 时的 MaxListenersExceededWarning

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:32 26 4
gpt4 key购买 nike

在我的 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);

但是,我收到以下警告:

( Node :4497)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个最终听众。使用emitter.setMaxListeners()来增加限制
( Node :4497)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个完成听众。使用emitter.setMaxListeners()来增加限制
( Node :4497)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个取消管道监听器。使用emitter.setMaxListeners()来增加限制
( Node :4497)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个排水监听器。使用emitter.setMaxListeners()来增加限制
( Node :4497)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个数据监听器。使用emitter.setMaxListeners()来增加限制
( Node :4497)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个错误监听器。使用emitter.setMaxListeners()来增加限制
( Node :4497)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 位亲密听众。使用emitter.setMaxListeners()增加限制

这些问题是由什么引起的?如何在不破坏功能的情况下解决这些问题?

最佳答案

我最近遇到了类似的问题,管道导致最大监听器警告。我没有使用事件监听器,而是严格管道资源。当我添加太多可写管道来接收来自同一源的数据时,例如 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:\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(writable);

我对此感到困惑,因为我知道这并不是因为我有任何未处理的监听器导致内存泄漏。我想我们有理由增加最大听众限制,因为我们已经做了尽职调查。

在我的源管道上,我添加了一些代码mp4frag.setMaxListeners(20);。现在,当我超过这个数字时,我会收到警告MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 21 个终端听众。使用emitter.setMaxListeners()来增加限制,这告诉我我的设置值20正在被使用。

关于node.js - 递归使用 socket.pipe 时的 MaxListenersExceededWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47774663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com