nodejs setMaxListeners zu vermeiden, memory-leak-detection
Las ich einige andere Fragen und Beiträge, aber ich konnte nicht finden wo sich zu bewerben .setMaxListeners(0).
Ich bin mit einem einfachen websocket-server, der kommt mit der errer:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at Socket.EventEmitter.addListener (events.js:160:15)
at Socket.Readable.on (_stream_readable.js:689:33)
at XHRPolling.Transport.setHandlers (D:\nodeJS\host\node_modules\socket.io\lib\transport.js:116:15)
at XHRPolling.HTTPPolling.setHandlers (D:\nodeJS\host\node_modules\socket.io\lib\transports\http-polling.js:53:39)
at XHRPolling.Transport.handleRequest (D:\nodeJS\host\node_modules\socket.io\lib\transport.js:70:10)
at XHRPolling.HTTPTransport.handleRequest (D:\nodeJS\host\node_modules\socket.io\lib\transports\http.js:84:39)
at XHRPolling.HTTPPolling.handleRequest (D:\nodeJS\host\node_modules\socket.io\lib\transports\http-polling.js:73:41)
at XHRPolling.Transport (D:\nodeJS\host\node_modules\socket.io\lib\transport.js:31:8)
at XHRPolling.HTTPTransport (D:\nodeJS\host\node_modules\socket.io\lib\transports\http.js:29:13)
at XHRPolling.HTTPPolling (D:\nodeJS\host\node_modules\socket.io\lib\transports\http-polling.js:27:17)
Ich bin die Instanziierung der router diese Weise:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app, { log: false })
, fs = require('fs');
app.listen(8070);
Dann bin ich empfangsbereit für eingehende socket-requests:
io.sockets.on('connection', function (socket) {
socket.on('createTake', function(data){...}
});
Wo kann ich mich bewerben, die MaxListeners?
Ich schon so probiert:
io.sockets.on(...).setMaxListeners(0);
Aber es funktioniert nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anfügen Zuhörer io.sockets (io.sockets.auf(...)). Bewerben Sie sich setMaxListeners auf das gleiche Objekt (zu EventEmmiter). So versuchen:
Dies ist geregelt durch die "maxListeners" - option. Sie haben 2 Möglichkeiten: deaktivieren Sie Speicher-Leck vollständig (ich würde nicht empfehlen, dies zu tun) oder erhöhen maxListeners.
1. Zu halten, Funktion aktiv, nur nicht zu aggressiv:
Standardwert ist 10, erhöhen Sie diesen Wert, statt zu halten, memory-leak-detection aktiv ist, aber nicht so aggressiv. Geben Sie die Zahl, die Sie brauchen. Ich würde beginnen mit kleinen Schritten, wenn Sie nicht wissen, wie viele Zuhörer Sie verwenden werden. Fehler du hast die Nummer, wie viel Hörer angehängt in diesem moment.
2. Deaktivieren Sie die memory-leak-Funktion völlig:
Anderen verbunden Tipps:
Aktuelle Wert:
Wenn Sie brauchen, um zu reagieren, nur einmal für eine Veranstaltung nutzen, io.sockets.einmal(...) es wird entfernen Sie nicht verwendete Zuhörer. tomekK
warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. Trace
und einfach handhaben, wie Sie wollen.