2017-10-02 14 views
1

serveur:Node.js envoie l'entrée du serveur au client. Attention à la fuite de mémoire. Quelle est mon erreur? Et comment node.js exécute-t-il le code?

var net = require('net'); 
var stdin = process.openStdin(); 

var client_list = []; 

var server = net.createServer(function(connection) { 
    //console.log('client connected'); 

    connection.on('error', function(e){ 
     if(e.code == 'ECONNRESET'){ 
     console.log('Client dissconeccted'); 
     } 
    }); 
    //connection.write('Hello World!\r\n'); 
    stdin.addListener("data", function(d) { 
    // note: d is an object, and when converted to a string it will 
    // end with a linefeed. so we (rather crudely) account for that 
    // with toString() and then trim() 

    console.log("you entered: [" + d.toString().trim() + "]"); 
     connection.write(d.toString().trim()); 
    }); 
    connection.pipe(connection); 

}); 
server.listen(9999, function() { 
    console.log('server is listening'); 
}); 

Client:

var net = require('net'); 
var HOST = 'localhost'; 
var PORT = 9999; 
//var client = new net.Socket(); 

    var client = net.connect(PORT, HOST, function(){ 
     console.log('connected to server! ' + HOST + ':' + PORT); 
     //client.write('I am Superman'); 
    }); 

    client.on('data', function(data) { 
     var data = data.toString(); 
     console.log(data); 

     //If data starts with JS add injection functionallity 
     if (data === "END"){ 
      client.end(); 
      console.log("ENDING!") 
     } 
     else if (data === "poo"){ 
      console.log("HOLY SHIT!") 
     } 
    }); 

    //Keep trying to connect! 
    client.on('error', function(e) { 
     console.log('Parent connection error'); 
     //client.end(); 
     client.connect(PORT, HOST); 
    }); 

    client.on('end', function() { 
     console.log('disconnected from server'); 
    }); 

/*var client = net.connect({port: 8080}, function() { 
    console.log('connected to server!'); 
});*/ 

Alors qu'est-ce qui se passe est qu'il continue d'ajouter des auditeurs et me met en garde à 11 auditeurs avec le message (?):

"Possible EventEmitter memory leak detected. 11 data listeners added. Use emitter.setMaxListeners() to increase limit".

Pourquoi est-ce? J'ai essayé de corriger ceci en déplaçant stdin.addListener() mais cela ne prend pas du tout l'entrée ou le problème persiste. Suis-je sur quelque chose? Et comment fonctionne le code dans le noeud, est-ce une boucle?

Merci d'avance!

Répondre

0

Exécutez les scripts client et serveur. Je ne peux pas reproduire le message d'erreur que vous recevez. Je cours le code sur Ubuntu - nodejs 6.9.5, npm 5.4.2. Pourriez-vous poster le contenu de votre fichier package.json?

Mise à jour: regardé en ligne. semble être un vieux bug connu dans Node. https://github.com/nodejs/node-v0.x-archive/issues/5108

+0

{ "name": "tcp", "version": "1.0.0", "description": "client Tcp/test du serveur", "principaux": "server.js", "scripts": { "test": "echo \" Erreur: aucun test spécifié \ "&& exit 1" ", " auteur ":" Juliet ", " licence ":" ISC ", " dépendances " : { "net": "^ 1.0.2" } } –