Mejorando node.js: Faye

Como ya comentamos en una entrada anterior node.js es una herramienta muy potente, que nos permite crear servidores empleando javascript como lenguaje de programación en el servidor, pero puede ser costoso crear ciertas herramientas y protocolos desde 0.

Faye es una capa (extensión) sobre node.js, lógicamente escrita en javascript, que crea un sistema de publicación y suscripción a canales de mensajes basados en el protocolo Bayeux.

En otras palabras, faye se encarga de gestionar los canales, los envios de mensajes y la recepción por parte de los subscriptores a esos canales.

Faye consta de dos partes, una en el lado servidor y otra en el lado cliente (también escrita en javascript)

Para explicar el funcionamiento de faye más fácilmente pongamos un ejemplo:

Imaginemos que estamos creando una aplicación que necesita enviar notificaciones en tiempo real a todos los usuarios conectados a una página.

En nuestro script para node.js instroducimos lo siguiente:

  1. var Faye   = require(‘faye’),
  2. server = new Faye.NodeAdapter({mount: ‘/’});
  3.  
  4. server.listen(8000);

y lanzamos node.js

  1. $ node faye.js

Ahora en el cliente, cargamos un fichero javascript con este contenido:

  1. var client = new Faye.Client(‘http://localhost:8000/’);
  2.  
  3. client.subscribe(‘/messages’, function(message) {
  4. alert(‘Got a message: ‘ + message.text);
  5. });

Con estas dos sencillas operaciones, todos los usuarios que estén conectados a nuestra web estarán subscritos al canal messages y estarán en disposición de recibir información.

Para enviar un mensaje, desde uno de los clientes, que puede ser nuestro panel de control de la web ejecutamos el siguiente javascript:

  1. client.publish(‘/messages’,{
  2.  
  3. text: ‘Hello world’
  4. });

Y inmediatamente en todos los navegadores de los visitantes de la web aparecerá un alert con el mensaje “Hello world”

Este es un ejemplo extraído de la web de faye, pero quería explicarlo con un ejemplo práctico. Como veis la potencialidad y simpleza de este sistema es grande, ya que podemos enviar más variables que message si lo necesitasemos (por ejemplo, número de mensajes sin leer, fecha, etc), tambien podemos tener varios canales distintos a por los que enviar distintos tipos de información o solo subscribir a algunos usuarios a esos canales.

En un próximo post explicaré como manipular los mensajes en el lado servidor, para por ejemplo, almacenarlos en una base de datos, enviar mensajes desde el propio servidor, etc.

Relacionado

  • Anónimo

    Gran post, lo cierto es que node.js esta irrumpiendo de una manera muy potente. Me figuro que ya conoceréis pero sobre las librerias http://socket.io/ pera el tiempo real ha surgido el proyecto https://github.com/socketstream/socketstream y la verdad que reúne una gran numero de funcionalidad para trabajar con el tiempo real 

  • Anónimo

    Lo estudiaremos, gracias por el aviso ;)

  • http://www.facebook.com/camilo13a Cristhian Camilo R. Arango

    y como seria para enviarlo supongamos a una ip en especifico o un explorador o cliente de navegador en especifico y no a todos =) 

  • Anónimo

    Más que discriminar por IP, lo ideal es subscribir a los canales solo a los usuarios que desees, piensa que un mismo usuario puede estar subscrito a varios canales simultaneamente. Por ejemplo puedes crear un canal con el nombre /message_[IP1]_[IP2] asi solo los dos usuarios con esa IP accederan a los canales. (Lo ideal, por seguridad es que hagas un sha1($ip1.$ip2.$key)