2012-05-29 22 views
5

Estoy desarrollando una aplicación web que está conectada a un servidor y necesito que el servidor envíe cierta información a los clientes en un momento dado.Comunicación con el cliente del servidor: Long Polling, Comet y eventos enviados por el servidor (SSE)

Por lo tanto, comencé a leer sobre Eventos enviados por el servidor (SSE) porque el sitio web se ha desarrollado en HTML5 y SSE parecía que encajaba con lo que estaba buscando. Pero fue una sorpresa cuando leí que lo que realmente estaba haciendo SSE era enviar una solicitud del cliente al servidor en lugar de hacerlo de la manera opuesta (Ayer creo que entendí que una encuesta larga es una especie de emulación de inserción). Por lo tanto, empiezo a leer sobre sockets web (pero creo que el estándar sigue siendo un borrador) y también le eché un vistazo a Comet. Pero creo que no puedo encajar todas las piezas en mi mente.

¿Alguien destacaría estas tecnologías (y tal vez algún otro push tech) que se ajustan a mi problema y qué situación es más adecuada para cada una?

Muchas gracias, creo que estoy totalmente perdido en este campo.

Respuesta

6

Esta post es una mejor explicación, discutiendo la diferencia/ventajas/etc, sobre Long Polling, Comet, SSE y WebSockets.

En su mayor parte, el cliente generalmente tiene que hacer la primera solicitud al servidor para establecer una conexión. Una vez que se establece una conexión, el servidor puede enviar datos al cliente. Entonces, incluso con WebSockets, el cliente hará la solicitud inicial al servidor para establecer una conexión confiable entre los dos.

Los eventos enviados por el servidor utilizan una solicitud HTTP GET normal para establecer una conexión con el servidor. También es una conexión de solo lectura para el cliente. Tiene el beneficio de tener una implementación fácil ya que no tenemos que definir un nuevo protocolo. El problema es que las conexiones HTTP, incluso como conexiones persistentes, se cierran después de aproximadamente 15 segundos en la mayoría de los servidores web. Incluso para solicitudes de larga duración, el servidor web a menudo tiene un tiempo de espera después del cual cierra la conexión. Aquí es donde entra en juego la idea de un sondeo largo. Es una idea simple que hacemos una solicitud ajax normal al servidor y el servidor lo deja abierto el mayor tiempo posible. Si el servidor cierra la solicitud por el motivo que sea, inmediatamente vuelve a realizar la misma solicitud. Puede implementar un largo mecanismo de sondeo (es decir, Comet) con bastante facilidad con un servidor como Node.js y una solicitud normal de Ajax desde el navegador. Los eventos enviados por el servidor intentan abstraer la implementación del lado del navegador de esto con EventSource. Entonces, en lugar de tener que implementar el código del lado del navegador/cliente para largo sondeo/cometa, el navegador maneja esto por usted. Proporciona una buena abstracción de lo que parece una conexión persistente. Su servidor web solo necesita buscar solicitudes GET que especifiquen el Tipo de contenido, en el encabezado, como "texto/secuencia de eventos" y dejen la conexión HTTP abierta el mayor tiempo posible.

Sugiero que no se complique demasiado sobre lo que son los eventos enviados por el servidor. Si comprende una solicitud HTTP GET normal, es probable que ya tenga un 90% de comprensión de la idea subyacente.

Hay una diferencia entre SSE/Comet y el sondeo largo tradicional que podría valer la pena destacar. Según mi experiencia, la idea de una encuesta larga es que su solicitud no se devuelve hasta que tenga una actualización. En ese punto, la conexión HTTP se cierra y se realiza otra solicitud inmediatamente después. Con SSE, aunque puede cerrar la conexión HTTP inmediatamente después de enviar el mensaje actualizado, su objetivo es eliminar los datos del servidor al cliente sin cerrar/finalizar realmente la solicitud HTTP. Esto evita la sobrecarga de hacer realmente una solicitud GET. Esto se puede lograr con una solicitud ajax regular, pero nuevamente SSE proporciona una implementación agradable/eficiente con EventSource.

Editar: aclarar la distinción entre SSE y larga encuesta.

Cuestiones relacionadas