2010-04-29 14 views
9

Próbuję zrozumieć cel addListener w node.js. Czy ktoś może wyjaśnić, proszę? Dzięki! Prostym przykładem może być:Co robi addListener w pliku 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"); 

Odpowiedz

8

Ze względu na fakt, że node.js pracuje zdarzeniami i wykonuje wydarzenie pętli rejestracji słuchaczy pozwalają określić wywołania zwrotne, które będą wykonywane za każdym razem, gdy zdarzenie jest zwolniony. Jest to więc również forma asynchronizmu. strukturyzacja kodu.

Jest to porównywalne do odbiornika GUI, który wywołuje interakcję z użytkownikiem. Podobnie jak kliknięcie myszą, które uruchamia wykonanie kodu w Twojej aplikacji GUI, twoi słuchacze w twoim przykładzie będą uruchamiani natychmiast po wystąpieniu zdarzenia, tj. Nowy klient połączy się z gniazdem.

+0

Ok tak 'connect', 'dane' lub 'koniec' byłaby nazwa imprezy. Ale gdzie i kto definiuje te nazwy wydarzeń? – Jeff

+0

Czym dokładnie jest "zapętlanie zdarzeń"? – Jeff

+1

To zależy od źródła emisji zdarzenia. Dlatego istnieje klasa EventEmitter. Dla dostępnych obiektów, które są EventEmitters, takich jak twoje gniazdo (serwer), zajrzyj do dokumentacji, aby znaleźć nazwy zdarzeń. –

1

rejestruje odbiorcę dla "zdarzenia". Zdarzenia są identyfikowane za pomocą łańcuchów, takich jak "connect" i "data". drugim argumentem jest funkcja, tzw. "callback", określana również jako "obsługa zdarzeń". Ilekroć w obiekcie występuje określone zdarzenie, do którego zarejestrowano detektory, wywoływane są wszystkie procedury obsługi.

używa tego węzła, ponieważ wykorzystuje asynchroniczny model wykonania, który najlepiej można obsłużyć za pomocą podejścia sterowanego zdarzeniami.

Greetz
back2dos

+0

Rozumiem część wywołania zwrotnego \ async. Jest podobny do wydawcy/subskrybenta, więc zdarzenie zostaje wyzwolone, a subskrybent zdarzenia (wywołanie zwrotne) zostaje następnie wykonany jako asynchroniczny (bez blokowania). Ale po prostu nie mogłem pochylić się nad wyzwalającym. W jaki sposób "komunikuj się", komu? – Jeff

+0

Myślę, że muszę przeczytać w sekcji EventEmitter. – Jeff