Millorant node.js: Faye

Com ja vam comentar en una entrada anterior node.js és una eina molt potent, que ens permet crear servidors utilitzant javascript com a llenguatge de programació en el servidor, però pot ser costós crear certes eines i protocols des de 0.

Faye és una capa (extensió) sobre node.js, lògicament escrita en javascript, que crea un sistema de publicació i subscripció a canals de missatges basats en el protocol Bayeux .

En altres paraules, Faye s'encarrega de gestionar els canals, els enviaments de missatges i la recepció per part dels subscriptors a aquests canals.

Faye consta de dues parts, una al costat servidor i una altra al costat client (també escrita en javascript)

Per explicar el funcionament de Faye més fàcilment posem un exemple:

Imaginem que estem creant una aplicació que necessita enviar notificacions en temps real a tots els usuaris connectats a una pàgina.

En el nostre script per node.js instroducimos el següent:

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

i llancem node.js

  1. $ Node faye.js

Ara al client, vam carregar un fitxer javascript amb aquest contingut:

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

Amb aquestes dues senzilles operacions, tots els usuaris que estiguin connectats a la nostra web estaran subscrits al canal messages i estaran en disposició de rebre informació.

Per enviar un missatge, des d'un dels clients, que pot ser el nostre panell de control del web executem el següent javascript:

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

I immediatament en tots els navegadors dels visitants de la web apareixerà un alert amb el missatge "Hello world"

Aquest és un exemple extret del web de Faye, però volia explicar-ho amb un exemple pràctic. Com veieu la potencialitat i simplicitat d'aquest sistema és gran, ja que podem enviar més variables que message si ho necessitéssim (per exemple, nombre de missatges sense llegir, data, etc), també podem tenir diversos canals diferents per als quals enviar diferents tipus d'informació o sol subscriure a alguns usuaris a aquests canals.

En un proper post explicaré com manipular els missatges en el costat servidor, per per exemple, emmagatzemar-los en una base de dades, enviar missatges des del propi servidor, etc.

Relacionat

  • Anònim

    Gran post, la veritat és que node.js aquesta irrompent d'una manera molt potent. Em figuro que ja coneixereu però les llibreries http://socket.io/ pera el temps real ha sorgit el projecte https://github.com/socketstream/socketstream i la veritat que reuneix una gran nombre de funcionalitat per treballar amb el temps real

  • Anònim

    El estudiarem, gràcies per l'avís ;)

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

    i com seria per enviar-suposem a una ip en específic o un explorador o client de navegador en específic i no a tots =)

  • Anònim

    Més de discriminar per IP, l'ideal és subscriure als canals només als usuaris que desitgis, pensa que un mateix usuari pot estar subscrit a diversos canals simultàniament. Per exemple pots crear un canal amb el nom / message_ [IP1] _ [IP2] així només els dos usuaris amb aquesta IP accediran als canals. (L'ideal, per seguretat és que facis un sha1 ($ IP1. $ IP2. $ Key)