2010-04-29 17 views
9

Sto cercando di capire lo scopo di addListener in node.js. Qualcuno può spiegare per favore? Grazie! Un semplice esempio potrebbe essere:Cosa fa addListener in 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"); 

risposta

8

A causa del fatto che Node.js funziona event-driven ed esegue un evento-loop, registrare ascoltatori consentono di definire callback che verranno eseguiti ogni volta che l'evento viene generato. Quindi, è anche una forma di asincrono. strutturazione del codice.

È paragonabile al listener della GUI, che attiva l'interazione dell'utente. Come un clic del mouse, che attiva un'esecuzione di codice nell'app della GUI, i listener dell'esempio verranno eseguiti non appena si verifica l'evento, ovvero un nuovo client si connette al socket.

+0

Ok, quindi, 'data' 'connect' o 'fine' sarebbe il nome della manifestazione. Ma dove e chi definisce questi nomi di eventi? – Jeff

+0

Che cosa è esattamente "event-looping"? – Jeff

+1

Dipende dalla fonte dell'emissione dell'evento. Pertanto esiste la classe EventEmitter. Per gli oggetti disponibili che sono EventEmitters, come il tuo socket (server-), dai un'occhiata alla documentazione per trovare i nomi degli eventi. –

1

registra un listener per un "evento". Gli eventi sono identificati da stringhe, ad esempio "connect" e "data". il secondo argomento è una funzione, un cosiddetto "callback", indicato anche come "gestore di eventi". Ogni volta che si verifica un evento specifico all'interno dell'oggetto a cui sono stati registrati gli ascoltatori, vengono invocati tutti i gestori.

node.js utilizza questo, perché utilizza un modello di esecuzione asincrono, che può essere gestito con un approccio event-driven.

greetz
back2dos

+0

Capisco la parte callback \ async. È come un editore/sottoscrittore quindi viene attivato un evento e il sottoscrittore dell'evento (il callback) viene quindi eseguito in modo asincrono (in modo non bloccante). Ma non riuscivo a mettere la testa sul grilletto. Come si dice "connetti" viene attivato da chi? – Jeff

+0

Penso di aver bisogno di leggere la sezione EventEmitter. – Jeff