Comment gérer les événements dans un seul thread nodejs

WBOY
Libérer: 2023-05-08 09:47:37
original
425 Les gens l'ont consulté

Node.js est un environnement d'exécution JavaScript léger basé sur un modèle d'E/S événementiel et non bloquant. Cependant, le modèle monothread de Node.js amène souvent les développeurs à se poser des questions : comment gérer les événements dans un seul thread ?

Pour mieux répondre à cette question, jetons d'abord un œil au mécanisme de boucle d'événements de Node.js.

Mécanisme de boucle d'événement de Node.js

Le modèle monothread de Node.js ne signifie pas qu'il n'y a qu'un seul thread en cours d'exécution. En fait, lorsque Node.js est démarré, un thread principal sera automatiquement créé pour traiter. Code JavaScript. Le mécanisme de boucle d'événements de Node.js correspond à la façon dont ce fil gère les événements.

Tout d’abord, jetons un coup d’œil au flux de base de la boucle événementielle.

  1. Exécuter le code JavaScript

Lorsque Node.js reçoit une requête ou que d'autres événements se produisent, il exécutera le code JavaScript correspondant et placera le code dans une pile d'appels pour exécution. Chaque fois qu'une fonction est exécutée, un cadre correspondant est ajouté en haut de la pile d'appels.

  1. Gestion des fonctions de rappel

Si un événement est déclenché lors de l'exécution d'une fonction et porte une fonction de rappel correspondante, alors la fonction de rappel sera ajoutée à la table des événements. Event Table est une liste qui maintient la correspondance entre les événements et les fonctions de rappel correspondantes.

  1. Event Loop

Lorsque le code de la pile d'appels est exécuté, Node.js entrera dans l'étape de boucle d'événement (Event Loop). La fonction de l'interrogation d'événements est de déterminer si un événement se produit dans la table des événements. Si tel est le cas, supprimez la fonction de rappel correspondante et exécutez-la.

  1. Exécution de la fonction de rappel

Si l'interrogation d'événement trouve une fonction de rappel correspondant à l'événement, la fonction de rappel sera ajoutée à la pile d'appels et le code correspondant sera exécuté. Si un nouvel événement est déclenché pendant l'exécution de la fonction, il reviendra à la phase d'interrogation d'événement.

  1. Fermer

Lorsque Node.js constate qu'il n'y a plus d'événements à traiter dans la table des événements et qu'il n'y a actuellement aucun minuteur à attendre, le programme sera fermé. Sinon, il reviendra à la troisième étape et attendra que de nouveaux événements se produisent.

Comment gérer les événements ?

Le moyen le plus simple consiste à lier l'événement et la fonction de rappel ensemble, et à exécuter la fonction de rappel correspondante lorsque l'événement se produit. Nous pouvons regarder un exemple simple :

const EventEmitter = require('events');
const emitter = new EventEmitter();

emitter.on('event1', () => {
  console.log('event1 occured!');
})

emitter.emit('event1');
Copier après la connexion

Dans cet exemple, nous définissons un EventEmitter et lions un événement 'event1' et la fonction de rappel correspondante. Lorsque nous déclenchons l'événement 'event1' via submit.emit('event1'), la fonction de rappel liée sera exécutée et 'event1 s'est produit !'

Une autre façon courante de gérer les événements consiste à utiliser Promise. Grâce à Promise, nous pouvons convertir les opérations asynchrones et les fonctions de rappel en un objet chaînable, et utiliser les méthodes then et catch pour gérer les situations de réussite et d'échec. Par exemple :

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('result');
  }, 1000);
});

promise.then((result) => {
  console.log(result);
}).catch((error) => {
  console.error(error);
});
Copier après la connexion

Dans cet exemple, nous créons un objet Promise, simulons une opération asynchrone et traitons les résultats de l'opération asynchrone via les méthodes then et catch.

Enfin, Node.js fournit également des modules et API intégrés pour gérer divers événements. Par exemple :

  1. module http : utilisé pour gérer les requêtes et réponses HTTP.
  2. module fs : utilisé pour gérer les opérations de lecture et d'écriture de fichiers.
  3. module net : pour créer des serveurs et clients TCP et Unix Socket.
  4. objet processus : utilisé pour obtenir et contrôler les informations et le comportement du processus Node.js actuel.

Conclusion

Dans le modèle monothread, le traitement des événements est l'une des fonctionnalités principales de Node.js. Grâce au mécanisme de boucle d'événements, Node.js peut gérer un grand nombre de requêtes simultanées et réaliser une programmation asynchrone efficace. Nous pouvons utiliser des fonctions de rappel, Promise, des modules et des API intégrés pour gérer divers événements afin de mettre en œuvre diverses applications complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!