Boucle d'événements
Node.js est une application monofilaire, mais elle peut prendre en charge la concurrence via le concept d'événement et de callbacks. Toutes les API de Node.js sont asynchrones et comme elles sont monofilaires, elles utilisent des appels de fonctions asynchrones pour maintenir la concurrence. Node utilise le modèle de l'observateur. Le thread Node garde une boucle d'événement et chaque fois qu'une tâche est terminée, il déclenche l'événement correspondant qui signale à la fonction d'écoute d'événement de s'exécuter.
Programmation pilotée par les événements
Node.js utilise fortement les événements et c'est aussi l'une des raisons pour lesquelles Node.js est assez rapide par rapport à d'autres technologies similaires. Dès que Node démarre son serveur, il initie simplement ses variables, déclare des fonctions, puis attend simplement que l'événement se produise.
Dans une application pilotée par les événements, il y a généralement une boucle principale qui écoute les événements, puis déclenche une fonction de rappel lorsqu'un de ces événements est détecté.
Bien que les événements ressemblent beaucoup aux callbacks, la différence réside dans le fait que les fonctions de callback sont appelées lorsqu'une fonction asynchrone renvoie son résultat, alors que la gestion des événements fonctionne sur le modèle de l'observateur. Les fonctions qui écoutent les événements agissent comme des observateurs. Lorsqu'un événement est déclenché, sa fonction d'écoute commence à s'exécuter. Node.js dispose de plusieurs événements intégrés disponibles par le biais du module events et de la classe EventEmitter, qui sont utilisés pour lier les événements et les écouteurs d'événements comme suit :
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
Voici la syntaxe pour lier un gestionnaire d'événement à un événement :
// Bind event and event handler as follows
eventEmitter.on('eventName', eventHandler);
Nous pouvons lancer un événement de manière programmatique, comme suit:
// Fire an event
eventEmitter.emit('eventName');
Exemple
Créez un fichier js nommé main.js avec le code suivant :
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
// Create an event handler as follows
var connectHandler = function connected() {
console.log('connection succesful.');
// Fire the data_received event
eventEmitter.emit('data_received');
}
// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
// Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function() {
console.log('data received succesfully.');
});
// Fire the connection event
eventEmitter.emit('connection');
console.log("Program Ended.");
Maintenant, essayons d'exécuter le programme ci-dessus et de vérifier sa sortie :
$ node main.js
IT devrait produire le résultat suivant :
connection successful.
data received successfully.
Program Ended.
Comment fonctionnent les applications Node ?
Besoin d'aide ?
Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !