2010-04-29 6 views
9

Estoy tratando de entender el propósito de addListener en node.js. ¿Alguien puede explicar por favor? ¡Gracias! Un ejemplo sencillo sería:¿Qué hace addListener en 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"); 

Respuesta

8

Debido al hecho de que Node.js trabaja orientado a eventos y ejecuta un evento de circuito, el registro de detectores permiten definir las devoluciones de llamada que se ejecuta cada vez que se dispara el evento. Por lo tanto, también es una forma de asincronización. estructuración de código.

Es comparable al oyente GUI, que activa la interacción del usuario. Al igual que un clic del mouse, que desencadena una ejecución de código en su aplicación GUI, sus escuchas en su ejemplo se ejecutarán tan pronto como ocurra el evento, es decir, un nuevo cliente se conecta al socket.

+0

Ok por lo que 'conectar', 'datos' o 'final' sería el nombre del evento. ¿Pero dónde y quién define estos nombres de eventos? – Jeff

+0

¿Qué es exactamente 'evento-looping'? – Jeff

+1

Esto depende de la fuente de emisión del evento. Por lo tanto, existe la clase EventEmitter. Para los objetos disponibles que son EventEmitters, como su socket (servidor), eche un vistazo a la documentación para encontrar los nombres de los eventos. –

1

registra un oyente para un "evento". Los eventos se identifican por cadenas, como "connect" y "data". el segundo argumento es una función, una llamada "devolución de llamada", también denominada "controlador de eventos". Cada vez que ocurre un evento específico dentro del objeto al que los oyentes han sido registrados, se invocan todos los manejadores.

node.js usa esto, porque emplea un modelo de ejecución asincrónico, que se puede manejar mejor con un enfoque basado en eventos.

Greetz
back2dos

+0

Entiendo la parte callback \ async. Es como editor/suscriptor, por lo que se desencadena un evento y el suscriptor del evento (la devolución de llamada) se ejecuta de forma asíncrona (sin bloqueos). Pero no pude entender mi punto de activación. ¿Cómo se activa "conectar" por quién? – Jeff

+0

Creo que necesito leer en la sección EventEmitter. – Jeff