Node.js - koncepcja wywołań zwrotnych
Co to jest oddzwonienie?
Callback jest asynchronicznym odpowiednikiem funkcji. Funkcja zwrotna jest wywoływana po zakończeniu danego zadania. Węzeł intensywnie korzysta z wywołań zwrotnych. Wszystkie interfejsy API Node są napisane w taki sposób, że obsługują wywołania zwrotne.
Na przykład funkcja odczytująca plik może rozpocząć odczytywanie pliku i natychmiast zwrócić sterowanie do środowiska wykonawczego, aby można było wykonać następną instrukcję. Po zakończeniu operacji we / wy pliku, wywoła funkcję zwrotną podczas przekazywania funkcji zwrotnej, zawartość pliku jako parametr. Nie ma więc blokowania ani oczekiwania na wejście / wyjście pliku. To sprawia, że Node.js jest wysoce skalowalny, ponieważ może przetwarzać dużą liczbę żądań bez czekania, aż żadna funkcja zwróci wyniki.
Przykład kodu blokującego
Utwórz plik tekstowy o nazwie input.txt o następującej treści -
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Utwórz plik js o nazwie main.js z następującym kodem -
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("Program Ended");
Teraz uruchom plik main.js, aby zobaczyć wynik -
$ node main.js
Sprawdź dane wyjściowe.
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Program Ended
Przykład kodu nieblokującego
Utwórz plik tekstowy o nazwie input.txt z następującą zawartością.
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Zaktualizuj plik main.js, aby miał następujący kod -
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log("Program Ended");
Teraz uruchom plik main.js, aby zobaczyć wynik -
$ node main.js
Sprawdź dane wyjściowe.
Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Te dwa przykłady wyjaśniają koncepcję połączeń blokujących i nieblokujących.
Pierwszy przykład pokazuje, że program blokuje się, dopóki nie odczyta pliku, a potem dopiero kończy się program.
Drugi przykład pokazuje, że program nie czeka na odczytanie pliku i kontynuuje drukowanie "Program zakończony" i jednocześnie program bez blokowania kontynuuje odczytywanie pliku.
W ten sposób program blokujący jest wykonywany bardzo sekwencyjnie. Z punktu widzenia programowania łatwiej jest wdrożyć logikę, ale programy nieblokujące nie są wykonywane po kolei. W przypadku, gdy program musi użyć jakichkolwiek danych do przetworzenia, powinien być przechowywany w tym samym bloku, aby był wykonywany sekwencyjnie.