Bienvenidos sean a este post, hoy veremos un tema relacionado con los clientes y servidores http.
Si vienen de los posts anteriores hasta ahora hemos cubierto lo basico desde como trabajar con codigos muy basicos de node.js hasta como es un paquete de este, pasando desde como manejarlo hasta su estructura pero a partir de hoy veremos como son los objetos HTTPServer y HTTPClient lo cual nos permitira tener una mejor idea antes de comenzar con nuestra primera aplicacion.
El objeto del titulo es el nucleo de node.js porque el idioma tiene una arquitectura de manejo de eventos dado que la emision de eventos desde un objeto es uno de sus mecanismos primarios, EventEmitter es un objeto que da notificaciones (eventos) en diferentes puntos del ciclo de vida, con esto podemos deducir que muchos de los modulos nucleos de node.js son objetos EventEmitter y estos a su vez son un esqueleto perfecto para poder implementar programacion asincronica, y estos al estar integrados con node.js los hemos pasado desapercibido sin embargo debido a que son usados en todos lados debemos entender como y cuando implementarlos correctamente.
Este objeto es definido en el modulo events y para usar su clase directamente lo haremos mediante:
require('events');
En la mayoria de los casos no necesitamos hacer esto, porque en general para usar los objetos EventEmitter es mediante otros objetos que utilizan internamente a EventEmitter, pero en algunos determinados momentos debemos implementar una subclase de EventEmitter, para ello vamos a estudiarlo a traves de un ejemplo, nuestro primer paso sera crear un archivo con el nombre de emisor.mjs y le agregaremos el siguiente codigo:
emisor.mjs
import EventEmitter from 'events';
export class Emisor extends EventEmitter {
iniciar() {
var self = this;
setInterval(() => {
console.log(`${new Date().toISOString()} >>>> pulso`);
self.emit('pulso');
console.log(`${new Date().toISOString()} <<<< pulso`);
}, 1000);
}
}
Primero importaremos a EventEmitter del modulo events, despues definiremos una clase que sera heredera de EventEmitter, en ella definiremos un metodo llamado iniciar en el cual primero definiremos una variable que contendra al this, despues usaremos un setInterval para que repita el codigo de la funcion anonima cada 1 segundo, aqui mostraremos primero la hora y fecha que emitiremos un pulso, despues usaremos a emit con self para emitir el pulso, y luego indicaremos la hora y fecha de vuelta del pulso, en este caso usamos a self en lugar de this porque es una buena practica utilizada habitualmente porque el this siempre estara relacionado al setInterval en cambio mediante el self siempre apuntara al mismo lugar en memoria sin importar desde donde lo usemos, con esto ya tenemos la clase lo siguiente sera implementarla.
Nota: Si quieren saber mas sobre clases y herencia visiten este post.
Para implementarla debemos crear un nuevo archivo con el nombre de pulso.mjs y le agregaremos el siguiente codigo:
pulso.mjs
import { Emisor } from './emisor.mjs';
const emisor = new Emisor();
emisor.on('pulso', () => {
console.log(`${new Date().toISOString()} pulso recibido`);
});
emisor.iniciar();
Primero importaremos la clase definida anteriormente, lo siguiente sera definir un objeto de esta clase y en esta le asignaremos el metodo on donde vigilara por el evento pulso, cuando lo encuentre mostrara en pantalla el mensaje de la recepcion del pulso con la hora y fecha de ese momento, por ultimo llamaremos al metodo iniciar de la clase Emisor para comenzar con este ciclo, recuerden que setInterval lo emitira cada un segundo, veamos como trabaja nuestro codigo
En el video pueden ver como se implemento de manera muy simple un objeto EventEmitter desde una clase para poder enviar y recibir un pulso, pero esto es solo el comienzo.
Antes de finalizar analicemos el mecanismo de como trabajamos con el ejemplo, en este caso mediante el objeto podemos enviar un evento que el codigo puede recibir permitiendo que dos secciones separadas del codigo se conecten entre si.
Si repasamos el codigo tuvimos dos metodos encargados de manejar este «enlace cuantico», primero tuvimos al emit que se encarga de emitir el evento y despues tuvimos el on que se encarga de recibirlo, analicemos primero la sintaxis de emit:
objeto.emit(id_evento[, arg1, arg2, ... , argN]);
Si tomamos el ejemplo que vimos anteriormente el emit se puede aplicar al this, en ese caso por medio de self, donde el id del evento puede ser cualquiera (en el ejemplo fue pulso) y este sera el que usaremos para recibirlo, despues de manera opcional podemos pasar valores mediante argumentos, ahora veamos la sintaxis del metodo on:
objeto.on(id_evento, (argumentos) => {
... instrucciones ...
});
En este caso aplicamos el metodo al objeto que creamos desde la clase y le pasamos el mismo id que usamos con emit, cuando este llegue lo procesara con la funcion asociada, y si le pasaron argumentos desde el metodo emit deberemos usarlos en este para poder procesarlos, con la practica veremos cuan util nos resultara esta forma de trabajar.
En resumen, hoy hemos visto uno de los nucleos mas importantes de node.js como es EventEmitter, este nos permite emitir un evento con la identificacion que queramos, vimos como implementarlo, asi como procesarlo, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
