2010-04-29 7 views
9

J'essaie de comprendre le but de addListener dans node.js. Quelqu'un peut-il expliquer s'il vous plaît? Merci! Un exemple simple serait:Que fait addListener dans node.js?

var tcp = require('tcp'); 
var server = tcp.createServer(function (socket) { 
    socket.setEncoding("utf8"); 
    socket.addListener("connect", function() { 
    socket.write("hello\r\n"); 
    }); 
    socket.addListener("data", function (data) { 
    socket.write(data); 
    }); 
    socket.addListener("end", function() { 
    socket.write("goodbye\r\n"); 
    socket.end(); 
    }); 
}); 
server.listen(7000, "localhost"); 

Répondre

8

En raison du fait que Node.js fonctionne évènementielle et exécute une boucle d'événements, l'enregistrement des auditeurs vous permettent de définir les callbacks qui seront exécutées à chaque fois que l'événement est déclenché. Ainsi, c'est aussi une forme d'async. structuration de code.

Il est comparable à l'écouteur GUI, qui se déclenche sur l'interaction de l'utilisateur. Comme un clic de souris, qui déclenche une exécution de code dans votre application graphique, vos écouteurs dans votre exemple seront exécutés dès que l'événement se produit, c'est-à-dire qu'un nouveau client se connecte au socket.

+0

Ok, donc 'connecter', 'données' ou 'fin' serait le nom de l'événement. Mais où et qui définit ces noms d'événements? – Jeff

+0

Qu'est-ce que le "bouclage d'événement"? – Jeff

+1

Cela dépend de la source d'émission de l'événement. Par conséquent existe la classe EventEmitter. Pour les objets disponibles qui sont EventEmitters, comme votre socket (server-), jetez un oeil dans la documentation afin de trouver les noms des événements. –

1

enregistre un écouteur pour un "événement". Les événements sont identifiés par des chaînes, telles que "connect" et "data". le deuxième argument est une fonction, appelée "callback", également appelée "gestionnaire d'événements". Chaque fois qu'un événement spécifique se produit dans l'objet auquel les écouteurs ont été enregistrés, tous les gestionnaires sont appelés. Node.js utilise ceci, car il utilise un modèle d'exécution asynchrone, qui peut être mieux géré avec une approche axée sur les événements.

greetz
back2dos

+0

Je comprends la partie callback \ async. C'est comme éditeur/abonné donc un événement est déclenché et l'abonné à l'événement (le callback) est alors exécuté asynchrone (de manière non bloquante). Mais je ne pouvais tout simplement pas comprendre ce qui se passait. Comment dit "se connecter" se déclencher par qui? – Jeff

+0

Je pense que je dois lire la section EventEmitter. – Jeff