Hola, en este post les voy a mostrar una de las bondades que tiene Node.js y es la capacidad de emitir eventos a canales.
En principio esto nos sirve para delegar, eso significa que podemos pasarle datos a un canal y continuar con nuestro código, el canal apenas obtenga los datos trabajará de forma paralela a mi código. Esto es mágico ya que podrías delegar y no preocuparte por el tiempo de espera.
Código :
var events = require('events'); var channel = new events.EventEmitter(); channel.on('suma', function(numero_uno,numero_dos){ var resultado = numero_uno + numero_dos; console.log(resultado); }); channel.on('multiplicacion', function(numero_uno,numero_dos){ var resultado = numero_uno * numero_dos; console.log(resultado); }); channel.on('division', function(numero_uno,numero_dos){ setTimeout(function(){ var resultado = numero_uno / numero_dos; console.log("un segundo mas tarde ",resultado); }, 1000); }); channel.emit('division',9,4); channel.emit('suma',5,7); var numero_uno = 8; var numero_dos = 9; var a = numero_uno + numero_dos; var b = numero_uno * numero_dos channel.emit('multiplicacion',a,b);
Resultado:
- 12
- 1224
- un segundo mas tarde 2.25
En el anterior ejemplo creé tres canales: suma, multiplicación y división, en ese orden, pero al primero que le pasé datos fue a división y sin embargo éste responde un segundo después porque tiene un setTimeout para demostrarles la demora, pero esto no es problema ya que mi código sigue trabajando y emitiendo a otros canales sin bloquearse, recuerden que apenas emitimos datos a un canal ya estamos delegando.
Con esto se podrían procesar estadísticas, ya que podrías emitir el resultado de tu código a un canal para que éste mire a la base de datos resultados similares, compare y guarde una estadística.
Ya con esto te dejé muchas cosas en qué pensar y la idea es que dejes volar tu imaginación para ver en qué puedes usar este gran poder.
Algo que tienes que tener en cuenta al momento de delegar es que no puedes esperar una respuesta por parte del canal, ya que simplemente estás emitiendo datos para que sean procesados en otra parte del código.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por DevCH el 26 de Marzo de 2014
Por diegoug el 26 de Marzo de 2014
DevCH :
Este código solo funciona en Node.js, que es el lado del server en server.js
Por DevCH el 27 de Marzo de 2014
diegoug :
Oka, perfecto. Entonces cómo quedaría en el javascript del index.html por ejemplo.
Por Abducted el 28 de Marzo de 2014
¡Un saludo!.
Por diegoug el 28 de Marzo de 2014
DevCH :
diegoug :
Oka, perfecto. Entonces cómo quedaría en el javascript del index.html por ejemplo.
te aclaro, este código solo funciona del lado del servidor y solo sirve para interactuar con el servidor usando Node.js
Por DevCH el 01 de Abril de 2014
DevCH :
te aclaro, este código solo funciona del lado del servidor y solo sirve para interactuar con el servidor usando Node.js
Creo que no me di a entender, lo que pregunto, es como puedo invocar desde ej javascript del index.html el canal de "suma" para que el resultado lo pueda recibir del lado del cliente y a su vez presentarlo en la vista.
Por diegoug el 01 de Abril de 2014
diegoug :
DevCH :
te aclaro, este código solo funciona del lado del servidor y solo sirve para interactuar con el servidor usando Node.js
Creo que no me di a entender, lo que pregunto, es como puedo invocar desde ej javascript del index.html el canal de "suma" para que el resultado lo pueda recibir del lado del cliente y a su vez presentarlo en la vista.
Tienes que usar un evento socket, del lado del index un emit y del lado del server un on, cuando del lado del server recibes un on luego accionas el canal de suma.
Por alejonext el 11 de Abril de 2014
Por diegoug el 11 de Abril de 2014
alejonext :
Creo que no es necesario, ademas no puedes, solo puedes emitir a un evento unos argumentos, y dentro de esos argumento no debe ser otro evento a un canal.
Podrías anidar los canales, que si un canal recibe unos parámetros, apenas entren envías otro evento a otro canal; O si varios canales pueden enviar un evento a un canal al final después de tener un resultado.
Es importante que mires bien el siclo de tus datos , mas que ponerte fancy, es mejor que te ajustes a unas buenas practicas que ayude con la compatibilidad y legibilidad de tu código.