lunes, 15 de febrero de 2010

Comet ó Ajax

INTRODUCCIÓN

Hace casi cuatro años (aproximadamente) se hablaba de una nueva técnica de programación Web que utiliza el objeto XMLHttpRequest, muy similar a Ajax, por algunos llamada Comet. Está técnica también es conocida como Reverse Ajax, Ajax Push, Server Push, HTTP Push , Two-way-web, HTTP Streaming y HTTP server push entre otros.

HISTORIA

En el año 1994 Netscape Navigator 1.1 introdujo la posibilidad de realizar un "server push" a través de un tipo de contenido HTTP multipart / x-mixed-replace.  Una ejecución CGI mantenía una conexión TCP abierta en el navegador, con la que se podía realizar el envío de nuevos contenidos a intervalos arbitrarios, sin una solicitud del cliente.

Esta técnica tenía algunas aplicaciones interesantes, pero se adelantó a su tiempo y se empleó raramente. El soporte multipart / x-mixed-replace nunca fué agregado a Internet Explorer, así que cuando Netscape perdió la guerra de los navegadores en la década de los 90, esta técnica fue en su mayoría abandonada.

         Con la incorporación de ajax en el contexto de la programación web se comenzaron a presentar nuevos retos de desarrollo, lo que ha permitido el resurgimiento de esta vieja tecnología que data de hace más de 25 años.

                Alex de DojoToolkit.org fué el primero en definir esta técnica hacia el año 2006, y Dojo es el primer framework que implementa Comet.

EN QUE CONSISTE

Comet (Push Ajax) nos permite establecer una conexión abierta de larga duración entre el cliente y el servidor web, en este caso, es el servidor el que se encargará de enviar información al cliente cuando se genere algún evento en este.

Esta tecnología difiere del modelo original de la web, en el que un navegador solicita una página web completa o trozos de datos para actualizar una página web. En la práctica, las aplicaciones Comet usan tradicionalmente programación AJAX con una petición prolongada para detectar nueva información en el servidor.

Esto no quiere decir que el cliente no envía información al servidor, al contrario, si envía información al servidor, pero en este caso, el servidor no le responde al cliente con un bloque de datos, espera a que se suscite algún evento para informar al cliente de su nuevo estado.

Diagrama COMET


QUIENES USAN Comet

  • Chat en GMail
  •  Meebo
  •  Facebook
  •  Twitter
  •  Entre otros.

EJEMPLOS Y DOCUMENTACIÓN

En los siguientes enlaces se puede conseguir bastante información sobre la implementación de esta no tan nueva tecnología llamada COMET.

Español

http://www.ribosomatic.com/articulos/como-implementar-comet-con-php-y-prototype/

http://component-showcase.icefaces.org/component-showcase/showcase.iface

Ingles

http://cometdaily.com/

http://cometdproject.dojotoolkit.org/

http://alex.dojotoolkit.org/2006/03/comet-low-latency-data-for-the-browser/

http://www.ape-project.org/demos/1/ape-real-time-chat.html

http://www.lightstreamer.com/?gclid=CNjqupv39J8CFRKenAod8QL7-g

 

CONCLUSIONES

Como palabras finales, son innumerables las aplicaciones que se pueden servir de esta tecnología, que si bien no es nada nueva, hasta hace poco tiempo no se le prestaba la debida atención y que indudablemente está marcando una nueva era en la prestación de servicios vía web, lo que representa un crecimiento cada vez mayor de este mercado.

Por otro lado cabe destacar, que si bien esta tecnología hace uso en algunas implementaciones de otra tecnología tal como lo es ajax, no se debe confundir, pues puede ser aplicada sin el uso de esta.

                Se recomienda el uso de la terminología Push ajax para esta tecnología.

REFERENCIAS

http://alex.dojotoolkit.org/2006/03/comet-low-latency-data-for-the-browser/

http://www.openjsan.org/doc/f/fu/fuzzynerd/HTTP/Push/0.04/lib/HTTP/Push.html

http://es.wikipedia.org/wiki/Comet

7 comentarios:

miguel rojas dijo...

saludos amigo, hoy día estoy trabajando con esta tecnología,un mundo interesante esto del comet, cualquier cosa estamos a la orden para conversar siobre el tema, saludos desde caracas

Ing. Alejandro Fernandez dijo...

Saludos

Estoy en un proyecto que si bien es sencillo, tengo el problema de la actualización automática de una consulta a una DB MySql. Ademas de que empiezo en esto de la programación en PHP. Lo pude resolver temporalmente con una refresco de la pagina cada 15 segundos, pero esto, ademas de molesto, pues parpadea la imagen, me imagino que satura de consultas el servidor. La pagina en realidad muestra 3 tablas con resultados de consultas cada una a la misma tabla pero con condiciones diferentes.
Si me pudieran ayudar con esto, les agradecería infinitamente.
Saludos y sigo estudiando esto.

miguel rojas dijo...

saludos colega alejandro, una consulta, con que actualizo la consulta ? con un setimeout de javascript ? o usa ajax ? a que se deben los cambios en la B.D ?

Ing. Alejandro Fernandez dijo...

Miguel, gracias por su respuesta.
Paso a explicar un poco el asunto, tengo una pagina inicial con 3 iframes (no supe como hacerlo de otro modo, cada iframe hace una consulta a una base de datos en MySql (la misma tabla, diferentes condiciones), esta tabla recibe mensajes SMS (tengo un servidor conectado directamente a la plataforma de SMS del operador telefónico). Esta pagina es como un monitor de actividad, hay una persona que ve esta pagina y cada vez que entra un mensaje debe dar click sobre el y cambiale de estatus (respondido o rechazado), dependiendo de esto, el mensaje pasa a alguno de los otros iframes.
La actualizacion la realizo por un meta http-equiv="Refresh" content="15"
He leido mucho sobre Ajax y ahora sobre Comet, pero la verdad no me queda claro como mantener la conexion abierta para que se me reflejen mensajes que entran.

Reitero mi agradecimiento a cualquier ayuda.

Saludos

miguel rojas dijo...

amigo tiene gmail o msn para conversar por alli?

Ing. Alejandro Fernandez dijo...

Excelente

alejocr2003@gmail.com

Saludos

Unknown dijo...

Estimado miguel apasado un tiempo ya de esta publicacion pero me gustaria tener contacto con ud, debido a una consulta parecida a la de alejandro... hace meses q tengo problemas con COMETD si tuviera gmail o le dejo el mio... eddu.melendez@gmail.com