Latest web development tutorials

boucle d'événement Node.js

Node.js est un simple processus d'applications mono-thread, mais prend en charge simultanée via des événements et des callbacks, donc la performance est très élevé.

Chaque API Node.js est asynchrone et fonctionne comme un thread séparé, en utilisant des appels de fonctions asynchrones, et la simultanéité.

Node.js la quasi-totalité du mécanisme d'événement est mis en oeuvre en utilisant le mode d'observation du mode de conception.

Node.js est similaire à entrer dans un seul thread while (true) boucle d'événements jusqu'à ce qu'il n'y a pas d'observateur d'événements de sortie, chaque événement asynchrone génère un observateur d'événements, si un événement se produit est appelée la fonction de rappel.


Programmation événementielle

Node.js en utilisant le modèle événementiel, lorsque le serveur Web reçoit la demande, puis le mettre hors tension pour le traitement, puis à la prochaine demande de service Web.

Lorsque la requête est terminée, elle est renvoyée à la file d'attente de traitement, de la file d'attente quand il atteint le début, le résultat est renvoyé à l'utilisateur.

Ce modèle est une évolutivité très efficace est très forte, parce que le serveur Web a reçu des demandes sans attendre une opération de lecture ou d'écriture. (Ceci est également connu comme IO non bloquant IO ou événementielle)

Dans le modèle événementiel, il génère une boucle principale pour écouter les événements pour déclencher une fonction de rappel lorsqu'un événement est détecté.

L'ensemble du processus est si événementiel à réaliser, est très simple. Assez semblable au modèle d'observateur, l'événement est équivalent à un thème (Objet), alors que tout gestionnaire enregistré à cet événement correspond à l'observateur (Observateur).

Node.js a événement intégré multiple, nous pouvons grâce à l'introduction du module d'événements, et de lier et écouter les événements par instanciation classe EventEmitter exemples suivants:

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

L'événement de liaison gestionnaire de procédure suivante:

// 绑定事件及事件的处理程序
eventEmitter.on('eventName', eventHandler);

Nous pouvons programmer l'événement déclencheur:

// 触发事件
eventEmitter.emit('eventName');

Exemples

Créer un fichier main.js, le code est le suivant:

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

// 创建事件处理程序
var connectHandler = function connected() {
   console.log('连接成功。');
  
   // 触发 data_received 事件 
   eventEmitter.emit('data_received');
}

// 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler);
 
// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
   console.log('数据接收成功。');
});

// 触发 connection 事件 
eventEmitter.emit('connection');

console.log("程序执行完毕。");

Nous allons exécuter le code ci-dessus:

$ node main.js
连接成功。
数据接收成功。
程序执行完毕。

Comment Node travail d'application?

En fonction de nœud application exécute une fonction asynchrone opération de rappel comme la dernière fonction paramètre de rappel reçoit l'objet d'erreur comme premier paramètre.

Laissez-nous re-regarde l'exemple précédent, créer un input.txt, le document se lit comme suit:

本教程官网地址:www.w3big.com

Créer un fichier main.js, comme suit:

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err){
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("程序执行完毕");

Programme ci-dessus fs.readFile () est une fonction asynchrone est utilisé pour lire le fichier. Si une erreur se produit dans le processus de la lecture du fichier, l'erreur err objets va afficher un message d'erreur.

Si aucune erreur, readFile sauter objet sortie err, le contenu du fichier est sortie par la fonction de rappel.

Exécuter le code ci-dessus, des résultats d'exécution sont les suivantes:

程序执行完毕
本教程官网地址:www.w3big.com

Ensuite, nous supprimons le fichier input.txt des résultats d'exécution sont les suivants:

程序执行完毕
Error: ENOENT, open 'input.txt'

Input.txt parce qu'il n'existe pas le fichier, de sorte que la sortie du message d'erreur.