javascript - server sent events
Evento de servidor HTML5: EventSource vs. WebSocket empaquetado (2)
Los eventos enviados por el servidor son útiles en las aplicaciones que solo necesitan la inserción del servidor, mientras que los sockets web son buenos para las aplicaciones que necesitan comunicaciones rápidas en ambas direcciones.
Los ejemplos en los que los eventos enviados por el servidor son una buena solución son:
- Valores del valor de stock
- Noticiero
Los eventos enviados por el servidor hacen algunas cosas más que no están incorporadas en Web Sockets, como la reconexión automática y los eventId .
Los eventos enviados por el servidor también cuentan con un mayor soporte de navegador web a partir de hoy, con soporte en Safari (solo admite borradores anteriores de Web Sockets) y Opera (tiene Web Sockets deshabilitados de manera predeterminada y usa un borrador anterior).
Obtenga más información acerca de los eventos enviados por el servidor en las actualizaciones de secuencias con eventos enviados por el servidor .
¿La API de Eventos enviados por el servidor HTML5 (SSE) es solo una API restringida basada en eventos además de WebSockets HTML5?
Me parece que un EventSource
es solo un WebSocket
que:
- No se puede
.send()
datos - Utiliza el
text/event-stream
-
onmessage
eventos denominados dinámicamente (definidos por el servidor) en lugar deonmessage
La idea de que el servidor web lleve los eventos a los dispositivos del cliente es bastante intrigante. ¿Tiene esta API alguna tracción?
Me imagino que el modelo de evento asíncrono funcionaría de maravilla cuando se combina con Node, pero no veo muchos casos de uso para esto en mi mundo de ASP.NET.
Además de lo que Jonas dijo, los protocolos son completamente diferentes.
The WebSocket Protocol
(RFC 6455) se inicia como una conexión HTTP, luego utiliza un intercambio de información para actualizar la conexión al nuevo protocolo. Este es un protocolo binario que usa marcos, tipos de mensajes y más.Server-Sent Events
es una solicitud HTTP de larga ejecución que permanece abierta. El servidor envía mensajes en un formato simple basado en texto (UTF-8
), delimitado por/n/n
. Un mensaje tiene campos deevent
(el tipo de evento),data
,id
, y opcionalmente puede incluir comentarios.
Una gran diferencia es el modelo de seguridad. Con WebSockets, el valor predeterminado es permitir que cualquiera se conecte. El rechazo de una conexión debe realizarse en el lado del servidor, según el encabezado de Origin
.
SSE por otro lado, está más cerca de HTTP y usa la misma política de origen. De forma predeterminada, solo puede realizar solicitudes al mismo host y puerto. En el futuro, será posible usar CORS para realizar solicitudes de SSE entre dominios. A día de hoy, los navegadores aún no han implementado esto.
Los dos protocolos tienen diferentes enfoques, ya que resuelven diferentes problemas.