javascript - NodeJS 警告 : possible event emitter leak. 11 添加了开放监听器

标签 javascript node.js memory-leaks node-modules

我正在使用 NodeJS 和 WS 来测试 Websocket。为了从服务器上卸载一些工作,我想将 ping 从客户端发送到服务器,而不是相反。但是,每当我运行代码时,我都会收到此错误:

> (node) warning: possible EventEmitter memory leak detected. 11 pong listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
    at WebSocket.addListener (events.js:239:17)
    at Object.<anonymous> (/home/ubuntu/NodeJS-Runtime/websockets/client.js:40:12)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Function.Module.runMain (module.js:442:10)
    at startup (node.js:136:18)
    at node.js:966:3

这是我的代码:

for(var i=0; i<20; i++) {
    const clientNum = i;
    const ws = new WebSocket('ws://localhost:8080', {
    perMessageDeflate: false
        });

    ws.onerror = function(error) {
        if(!hasFailed && clientNum != 0)
            console.log('failed on: ' + clientNum + error);
        hasFailed = true;
    }

    ws.on('open', function() {
        // Send keep alive messages. Close if no response.
        ws.keepAlive = false;
        var interval = setInterval(function() {
            if (ws.keepAlive) {
                ws.close();
            } else {
                ws.ping(null, null, true);
                ws.keepAlive = true;
            }
        }, 25*1000); // milliseconds between pings

    });
    ws.on("pong", function() { 
            ws.keepAlive = false; 
    });

我在 pong 和 'on' 函数中都遇到此错误。

最佳答案

这不是错误,而是警告。如果您想禁用警告,请调用ws.setMaxListeners(0)表明您知道您正在设置超过 10 个监听器,以便运行时可以看到您知道自己在做什么。

此外,设置 ws.onerror 属性是不好的做法。相反,您需要调用 ws.on('error', function (error) {...,但这与您所询问的问题无关。

关于javascript - NodeJS 警告 : possible event emitter leak. 11 添加了开放监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44061276/

相关文章:

javascript - 使用 JavaScript/JQuery 从上次选择中获取复选框值

javascript - 如何使用 Protractor 在 Monaco Editor 中插入代码?

javascript - 垂直滑动应用enyojs

node.js - 类型错误 : Cannot read property 'collections' of undefined sails

node.js - 反向填充 Mongoose

javascript - 如何将数据从 Java 传递到 JavaScript Web 应用程序?

Node.js、Socket.io 多用户应用程序——存储用户 session ?

c++ - 犯一个愚蠢的内存错误

Android 分配跟踪器与 Mapview 的理解

ios - WKWebView 导致我的视​​图 Controller 泄漏