Introducción a SSE
SSE significa Server-Envied Events, que literalmente significa que el servidor envía información al cliente. SSE es un canal unidireccional,El servidor solo puede enviar información al clienteEl cliente solo puede recibir la solicitud SSE tras activarse por primera vez y no puede responder.
Las características clave de SSE incluyen:
- Facilidad de uso: SSE utiliza formatos de datos basados en texto como texto plano, JSON, etc., lo que hace relativamente sencillo enviar y analizar datos.
- Comunicación unidireccional: SSE soporta comunicación unidireccional entre el servidor y el cliente, donde el servidor puede enviar activamente los datos al cliente, mientras que el cliente solo puede recibir los datos.
- Tiempo real: SSE establece conexiones a largo plazo, permitiendo a los servidores enviar datos a los clientes en tiempo real sin solicitudes frecuentes.
SSE vs. WebSocket
WebSocket es otra tecnología web utilizada para permitir la comunicación bidireccional en tiempo real, que difiere en algunos aspectos de SSE. Aquí tienes una comparación entre SSE y WebSocket:
- Dirección de envío de datos: SSE es una comunicación unidireccional entre el servidor y el cliente, y el servidor puede enviar activamente datos al cliente. WebSocket, por otro lado, es una comunicación bidireccional, permitiendo el intercambio de datos bidireccional en tiempo real entre el servidor y el cliente.
- Establecimiento de conexión: SSE utiliza conexiones largas basadas en HTTP para establecer conexiones mediante solicitudes y respuestas HTTP ordinarias, lo que permite el envío de datos en tiempo real. Los WebSockets utilizan protocolos personalizados para permitir la comunicación bidireccional estableciendo conexiones WebSocket.
- Compatibilidad: Dado que SSE se basa en el protocolo HTTP, puede usarse en la mayoría de los navegadores modernos y no requiere actualizaciones adicionales del protocolo. Los WebSockets también son compatibles con la gran mayoría de los navegadores modernos, pero pueden ser problemáticos en algunos entornos de red especiales.
- Escenarios aplicables: SSE es adecuado para escenarios en los que el servidor envía datos al cliente en tiempo real, como actualizaciones de precios de acciones, noticias en tiempo real, etc. WebSocket es adecuado para escenarios que requieren comunicación bidireccional en tiempo real, como aplicaciones de chat y edición colaborativa con varias personas.
- Dependiendo de las necesidades y escenarios específicos de tu negocio, elegir SSE o WebSocket depende de tus necesidades reales. Si solo necesitas un servidor para enviar datos a los clientes en una dirección y quieres mantenerlo simple y compatible, SSE es una buena opción. Si necesitas lograr una comunicación bidireccional, o si necesitas funciones y control más avanzados, entonces WebSocket puede ser una mejor opción para ti.
Formato de flujo de eventos SSE
Un flujo de eventos es un flujo simple de datos de texto que debe codificarse en formato UTF-8. Transmisión del eventoEl mensaje está separado por un par de saltos de línea。 Se ignoran las líneas de comentarios de comportamiento que empiezan por dos puntos. Cada campo se representa con un nombre de campo, seguido de dos puntos y luego datos de texto para el valor de ese campo.
Los campos son los siguientes:
evento: Una cadena utilizada para identificar el tipo de evento. Si esta cadena está especificada, el navegador envía un evento con el nombre especificado al oyente correspondiente; El cliente debe usar addEventListener() para escuchar el evento especificado. Si un mensaje no especifica un nombre de evento, entonces se puede llamar al manejador onmessage.
datos: El campo de datos del mensaje. Cuando el EventSource recibe varias líneas consecutivas que empiezan con data:, las concatena, insertando un salto de línea entre ellas. Se elimina el salto de línea al final.
identificación: ID de evento, que se convierte en el valor de propiedad de la propiedad interna del objeto EventSource actual "Último ID de evento".
reintentar: el momento de reconectar. Si se pierde la conexión al servidor, el navegador esperará el tiempo especificado y luego intentará reconectarse. Este debe ser un entero que especifique el tiempo de reconexión en milisegundos. Si se especifica un valor no entero, el campo se ignora.
Instancia de EventSource
La interfaz EventSource es la interfaz entre el contenido web y el servidor para enviar eventos.
Propiedad EventHandler
EventSource.onopen se llama cuando la conexión está abierta. EventSource.onmessage se llama cuando se recibe un mensaje sin un atributo de evento. EventSource.onerror se llama en excepciones de conexión.
Servidor SSE (ASP.NET Core)
Crea un nuevo proyecto ASP.NET Core con .NET 8 y el código del controlador es el siguiente:
Para el cliente que establece el enlace, envía un mensaje al cliente cada segundo intervalo.
Cliente SSE
Escribe código cliente en la página de Vista usando html y js de la siguiente manera:
Comienza el proyecto con los siguientes efectos:
Referencia:
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible. |