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

187
Vistas
Cómo procesar eventos de socket.io en su orden de entrada

Tengo la siguiente configuración:

 async MyFunction(param) { //... Do some computation await WriteToDB() } io.on('connection', (socket) => { socket.on('AnEvent', (param) => MyFunction(param)) })

Cuando llega un evento, llama a una función asíncrona que realiza algunos cálculos y, al final, escribe el resultado en una base de datos con otra llamada asíncrona.

Si MyFunction no tiene una llamada asíncrona para escribir la base de datos al final, por ejemplo

 MyFunction(param) { //... Do some computation }

entonces es obvio que todos los eventos se procesarán en su orden de entrada. El procesamiento del siguiente evento solo comenzará después de que finalice el procesamiento del anterior. Sin embargo, debido a la llamada asíncrona a la base de datos, no sé si esos eventos entrantes aún se procesarán por completo en orden. Me temo que el procesamiento del siguiente evento comienza antes de que finalice la await WriteToDB() . ¿Cómo cambio el código para procesarlos completamente en orden?

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Tiene razón en que no hay garantía de que los eventos entrantes se procesarán en el pedido.

Para lograr lo que está pidiendo, necesitaría una "Cola de mensajes" que verificará periódicamente si hay nuevos mensajes y los procesará uno por uno.

 const messageQueue = []; // SocketIO adding Message to MessageQueue const eventHandler = (message) => { messageQueue.push(message); } const messageHandler = () => { if (messageQueue.length === 0) { return; } const message = messageQueue.shift(); // Handle Message // If successful, ask for next message return messageHandler(); }

Por supuesto, mi ejemplo es bastante ingenuo, pero espero que le dé una idea general de cómo se logra lo que está pidiendo.

Si necesita una cola de mensajes más robusta, consulte RabbitMQ, BullMQ, Kafka

about 4 years ago · Santiago Gelvez 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