Latest web development tutorials

bucle de eventos Node.js

Node.js es un proceso de un solo aplicaciones de hilo único, sino que apoya concurrente a través de eventos y devoluciones de llamada, por lo que el rendimiento es muy alto.

Cada API Node.js es asíncrona y se ejecuta como un hilo separado, mediante llamadas a funciones asíncronas y concurrencia.

Node.js sustancialmente todo el mecanismo de eventos se implementa utilizando el modo observador modo de diseño.

Node.js es similar a entrar en un solo hilo while (true) bucle de eventos hasta que no hay un observador evento de salida, cada evento asíncrono genera un observador caso, si se produce un evento que se llama la función de devolución de llamada.


la programación dirigida por eventos

Node.js utilizando el modelo orientado a eventos, cuando el servidor web recibe la solicitud, y luego ponerlo fuera para procesar y después a la siguiente solicitud de servicio web.

Cuando la solicitud se ha completado, se devuelve a la cola de procesamiento, la cola cuando alcanza el comienzo, el resultado se devuelve al usuario.

Este modelo es muy eficiente escalabilidad es muy fuerte, ya que el servidor web ha estado recibiendo solicitudes sin esperar a ninguna operación de lectura o escritura. (Esto también se conoce como IO de no bloqueo IO o basada en eventos)

En el modelo orientado a eventos, genera un bucle principal para detectar los eventos que desencadenan una función de devolución de llamada cuando se detecta un evento.

Todo el proceso es tan orientada a eventos de lograr, es muy simple. Algo similar al patrón de observador, el evento es equivalente a un tema (sujeto), mientras que todos controlador registrado para este evento corresponde al observador (observador).

Node.js tiene múltiples eventos incorporado, podemos a través de la introducción del módulo de eventos, y para unir y detectar eventos creando una instancia de la clase EventEmitter siguientes ejemplos:

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

El siguiente procedimiento controlador de eventos de unión:

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

Podemos programar el evento de activación:

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

Ejemplos

Crear archivo main.js, el código es el siguiente:

// 引入 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("程序执行完毕。");

Vamos a ejecutar el código anterior:

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

¿Cómo el trabajo de aplicación Nodo?

En función de aplicación de nodo realiza una función de devolución de llamada operación asincrónica como la última función de parámetros de devolución de llamada recibe el objeto de error como el primer parámetro.

Vamos a volver a fijamos en el ejemplo anterior, creamos un entrada.txt, el documento dice lo siguiente:

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

Crear archivo main.js, de la siguiente manera:

var fs = require("fs");

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

Fs.readFile programa anterior () es una función asíncrona se utiliza para leer el archivo. Si se produce un error en el proceso de leer el archivo, errar el error objetos emite un aviso de error.

Si no hay errores, se saltan readFile objeto Err de salida, el contenido del archivo se emite a través de la función de devolución de llamada.

Ejecutar el código anterior, los resultados de ejecución son las siguientes:

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

A continuación se suprima el archivo entrada.txt resultados de la ejecución son los siguientes:

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

Input.txt debido a que el archivo no existe, por lo que la salida del mensaje de error.