Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

109
Vistas
¿Posible condición de carrera con EventSource?

Estoy usando eventos enviados por el servidor (SSE) y mi código para conectarme a mi backend SSE se ve así:

 function sseSubscribe() { events = new EventSource("/v1/sse/" + sseID + "/" + lastEventId); events.addEventListener("message", sseHeartbeat); events.addEventListener("error", sseError); events.addEventListener("reply", sseReply); events.addEventListener("refresh", sseRefresh); }

Esta función se llama para configurar la conexión SSE inicial, pero también cuando se desea una reconexión (porque la conexión se interrumpió por cualquier motivo).

En el servidor, si lastEventId es mayor que 0, transmitirá los mensajes faltantes al cliente.

Entonces, hipotéticamente, si se bloqueara new EventSource() , esto no funcionaría, porque los eventos se transmitirían de vuelta al navegador antes de que se registraran los controladores de eventos correspondientes (respuesta, actualización, etc.).

Sin embargo, que yo sepa, este no es el caso (creo que llamar a un new EventSource es una operación sin bloqueo, aunque no estoy seguro). Sin embargo, supongo que es posible que si la computadora del usuario fuera lo suficientemente lenta y su conexión lo suficientemente rápida, tal vez los mensajes faltantes podrían transmitirse antes de que se registraran los oyentes.

¿Es este un temor razonable o debería sentirme relativamente seguro con el código anterior?

Para reiterar, este código parece funcionar, pero mi temor es que los mensajes se transmitan desde la nueva conexión de EventSource antes de que se agreguen los controladores correspondientes. ¿Es esto razonable, o tiene un 0% de probabilidad de que suceda?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La conexión se produce después de que se haya completado la ejecución actual de Javascript. Creo que sería seguro asumir esto para todos los navegadores, aunque no tengo una referencia definitiva.

Por ejemplo, Chrome inicia la conexión desde un temporizador, que probablemente se vincula con el mismo bucle de eventos que, por ejemplo, setTimeout : https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/ renderer/modules/eventsource/event_source.cc;l=99?q=EventSource&ss=chromium

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda