Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 4163|Respuesta: 4

[.NET Core] SSE (1) utiliza ASP.NET Core como servidor SSE

[Copiar enlace]
Publicado el 5-4-2024 a las 11:54:12 | | | |
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.




Anterior:Una comparación sencilla entre Garnet cache y Redis desarrollado con .NET
Próximo:JS escucha la combinación de teclas ctrl + enter
 Propietario| Publicado el 5-4-2024 12:03:28 |
La API EventSource predeterminada del navegador impone algunas restricciones sobre los tipos de solicitudes permitidas: las únicas URLs de parámetros que se permiten pasar son y withCredentials, por lo tanto:

No puedes pasar en el cuerpo de la petición: debes codificar toda la información necesaria para ejecutar la solicitud en la URL, que está limitada a 2000 caracteres en la mayoría de los navegadores.
No puedes pasar encabezados de solicitudes personalizados
Solo puedes hacer una solicitud GET; no se puede especificar otro método.
Si se corta la conexión, no tienes control sobre la política de reintentos: el navegador intenta silenciosamente varias veces y luego se detiene, lo cual no es suficiente para ningún tipo de aplicación robusta.


Fuente-evento-fetch

La biblioteca proporciona una interfaz alternativa basada en la API Fetch para usar eventos enviados por el servidor. Es totalmente compatible con el formato de flujo de eventos, así que si ya tienes un servidor que emite estos eventos, puedes usarlo como antes. Sin embargo, ahora tienes más control sobre las solicitudes y respuestas

El inicio de sesión del hipervínculo es visible.
Publicado el 14-11-2024 14:34:25 |
docto
 Propietario| Publicado el 25-12-2024 16:36:44 |
Small slag Publicado el 2024-4-5 12:03
La API predeterminada EventSource del navegador impone algunas restricciones sobre los tipos de solicitudes permitidas: la única URL de parámetro que se permite pasar es withCredentia ...

Compila el paquete NPM en un script JavaScript listo para navegador
https://www.itsvse.com/thread-10762-1-1.html
 Propietario| Publicado el 25-12-2024 16:48:45 |
SSE (2) problema de reconexión de la fuente del evento de obtención tras cambiar de pestaña del navegador
https://www.itsvse.com/thread-10906-1-1.html
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com