NodeJS警告:可能的事件发射器泄漏。 11个开放的听众添加

我使用NodeJS和WS来testingwebsocket。 为了从服务器上卸载一些工作,我想从客户端发送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; }); 

我得到这个错误的乒乓和'开'function。

这不是一个错误,这是一个警告。 如果要禁用警告,请调用ws.setMaxListeners(0)来表明您知道您正在设置10个以上的侦听器,以便运行时可以看到您知道您在做什么。

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