2016-06-26 10 views
0

Ich bin relativ neu zu Knoten und ich kämpfe um die Antworten zu finden!nodejs Websocket Server - möglich EventEmitter Speicherleck erkannt

Ich habe ein sehr einfaches Node-Skript erstellt, das verwendet wird, um eine Verbindung zu einem seriellen RS232-Gerät herzustellen, gleichzeitig dient es als Websocket-Server, so dass Clients eine Verbindung herstellen können, um Live-Ausgabe vom RS232-Gerät zu erhalten Ich erhalte immer Ereignisemitter Max Listeners Fehler, nachdem 11 Clients verbunden sind.

Wenn jemand mir hier helfen kann oder wenn ich über den Code den falschen Weg gegangen bin, einen Rat geben, würde es geschätzt werden.

Dank Jamie

here der Code

var serialport = require("serialport"); 
var SerialPort = serialport.SerialPort; 
var WebSocketServer = require("ws").Server; 

var serialPort = new SerialPort("COM5", { 
    baudrate: 9600, 
    parser: serialport.parsers.readline("\n") 
}); 

var wss = new WebSocketServer({ port: 3000 }); 

serialPort.on("open", function() { 

    console.log('open'); 

    var weight = 0; 

    wss.on("connection", function(ws) { 

     serialPort.on('data', function(data) { 

      weight = data.toString(); 

      wss.clients.forEach(function(wssclient) { 
       wssclient.send(weight); 
      }); 

     }); 

    }); 

}); 
+0

Haben Sie immer doppelt Raum der meisten Ihren Code? – jfriend00

Antwort

1

Wenn Ihre Verbindung Handler, fügen Sie einen neuen Event-Handler serialPort.on('data', ...). Für jede neue eingehende Websocket-Verbindung fügen Sie einen neuen Ereignishandler für die serialPort hinzu. Und Sie entfernen diese auch nie. Sie sammeln sich also für immer an und alle machen dasselbe.

Die Warnung, die Sie sehen, ist, weil das Objekt eventEmitter eine Ansammlung von Ereignishandlern alle für die gleiche Nachricht sieht und vermutet, dass etwas falsch sein könnte.

Stattdessen können Sie, dass aus den Connection-Handler bewegen und in nur einen Event-Handler alle Ihre Verarbeitung tun:

serialPort.on('data', function(data) { 
    var weight = data.toString(); 
    wss.clients.forEach(function(wssclient) { 
     wssclient.send(weight); 
    }); 
}); 

serialPort.on("open", function() { 
    console.log('open'); 
    wss.on("connection", function(ws) { 
     // code here that needs to happen upon connection 
    }); 
}); 
+0

danke für die Hilfe – user3154492

Verwandte Themen