Solo agregaría una perspectiva más alta a lo que se ha dicho, y es que SSE es un modelo de publicación y suscripción en lugar de un sondeo constante en caso de AJAX.
En general, ambas formas (sondear y publicar-suscribir) están tratando de resolver el problema de cómo mantener un estado actualizado en el cliente.
1) Modelo de sondeo
Es simple. El cliente (navegador) primero obtiene un estado inicial (página) y para que se actualice, necesita solicitar periódicamente el estado (página o su parte) y procesar el resultado en el estado actual (actualizar toda la página o procesarla inteligentemente en su parte en caso de AJAX).
Naturalmente, una desventaja es que si no ocurre nada con el estado del servidor, los recursos (CPU, red, ...) se utilizan innecesariamente. Otra es que incluso si el estado cambia, los clientes lo obtienen solo en el siguiente período de encuesta, no lo antes posible. A menudo se necesita evaluar un buen compromiso de tiempo entre las dos cosas.
Otro ejemplo de sondeo es un spinwait en subprocesamiento.
2) publicación-suscripción modelo
Funciona de la siguiente manera:
- (cliente primeras solicitudes y muestra un estado inicial)
- cliente se suscribe al servidor (envía una solicitud, posiblemente con algún contexto como fuente de eventos)
- servidor marca la referencia al cliente a algunos de sus repositorios de referencia del cliente
- en caso de una actualización del estado, se rver envía una notificación al cliente en función de la referencia al cliente que posee; es decir, no es una respuesta a una petición, pero un mensaje iniciado por el servidor
- buenos clientes darse de baja cuando no están más interesados en las notificaciones
Ésta es SSE, o dentro de enhebrar un evento de temporizador de espera, como otro ejemplo. Un inconveniente natural, como se dijo, es que el servidor debe conocer todos sus clientes suscritos, lo que, dependiendo de una implementación, puede ser un problema.