# Comet

En el desarrollo web, Comet es un neologismo para describir un modelo de aplicación web en el que una petición HTTP mantenida abierta permite a un servidor web enviar datos a un navegador por Tecnología Push, sin que el navegador los solicite explícitamente. Comet es un término paraguas de múltiples técnicas para conseguir esta interacción. Todos estos métodos confían en características incluidas por defecto en navegadores, como JavaScript, en lugar de sobre plugins no disponibles por defecto.
En teoría, el enfoque Comet 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 cualquier caso, 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. El concepto precede al acuñamiento del neologismo, y es conocido por otros nombres, incluyendo Ajax Push, Reverse Ajax, Two-way-web, HTTP Streaming y HTTP server push, entre otros.

## Antecedentes

En un principio se utilizaban Java Applets con un socket TCP. Posteriormente Netscape desarrolló su propia técnica para implementar tiempo real en la web.
Normalmente una página web es entregada al cliente a petición de él mismo. Para cada petición el navegador realiza una conexión HTTP al servidor web, el servidor devuelve los datos y termina la conexión. La desventaja de este método es que para poder actualizar los datos en el cliente, el usuario o el cliente debe actualizar o cambiar de página web, lo que hace que esto tome mucho tiempo sin dejar de lado que consume mucho ancho de banda. Una solución a esto es AJAX que permite al navegador solicitar solo la parte de la página web que fue cambiada o actualizada. Esto reduce significativamente el tiempo para actualizar el contenido, sin embargo para algunas situaciones no es conveniente.
Por ejemplo en una aplicación de mensajes instantáneos que está basada sobre AJAX, para que una lista de usuarios pueda actualizarse pudiendo cambiar si un usuario se conectó o desconectó, el cliente necesita conectarse al servidor web cada cierto tiempo solicitando los cambios que hayan ocurrido, esto consume ancho de banda y tiempo.

## AJAX vs Comet

La diferencia que existe entre AJAX y Comet es que en este modelo se mantiene una conexión abierta entre el cliente y el servidor web; el cliente no solicita los datos, pero si envía información al servidor, y el servidor no le responde al cliente con un bloque de datos, se espera a que haya algún evento de lado del servidor para enviar la información.
Volviendo al ejemplo de la aplicación de mensajes instantáneos, el cliente no deberá estar solicitando los cambios de la lista de usuarios, el servidor web es el que le envía los datos al cliente cuando cambia la lista de usuarios, esto reduce considerablemente el consumo de ancho de banda.

## Historia

Alex de DojoToolkit.org fue el primero en definir esta técnica, y Dojo es el primer framework que implementa Comet.

## Sitios usando Comet

* Virgil's One™ (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). is a Comet implementation for streaming marketdata solutions for retail-, wholesale-, private banks and brokers
* Chat en GMail
* Meebo
* Jot Live
* Facebook
* APE Project is a full-featured OpenSource solution designed for Ajax Push. It includes a comet server and a Javascript Framework.