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.