problema con sistema de queue, misma funcion se ejecuta N veces. (N = usuarios)

Iniciado por eimattz, 1 Julio 2021, 11:57 AM

0 Miembros y 1 Visitante están viendo este tema.

eimattz

Buenas como va. No creo que exista mejor lugar para preguntar esto.
El problema es el siguiente.


En mi pagina web tengo un sistema de queue, donde supongamos, 4 usuarios aceptan la lobby. Por cada usuario que acepta, el id del usuario se añade a un array y se chequea si array = 4 y entonces ejecutamos creatematch(). Este codigo es ejecutado en el FRONTEND, por lo tanto se ejecuta la funcion 4 veces (una vez por usuario), creándome 4 matchs. La funcion creatematch() basicamente envia un objeto a mi db en firebase.

Mi pregunta es evidente... como hago para que solo se ejecute una vez creatematch()?

Saludos

MinusFour

Quizás está función no debería correr en el frontend. Una alternativa sencilla que veo es que el que crea el lobby es el único que pueda ejecutar "createMatch".

eimattz

Pensé en eso, pero suponiendo que esta persona sale de la página luego de aceptar, entonces la partida nunca se iniciaría.

Ahora suponiendo que el servidor ejecuta la función, alguien o algo tiene que avisarle para que la ejecute, por lo que siento que estoy en el mismo problema y no se me ocurren formas "eficientes"

MinusFour

Cita de: eimattz en  1 Julio 2021, 23:13 PM
Pensé en eso, pero suponiendo que esta persona sale de la página luego de aceptar, entonces la partida nunca se iniciaría.

Ahora suponiendo que el servidor ejecuta la función, alguien o algo tiene que avisarle para que la ejecute, por lo que siento que estoy en el mismo problema y no se me ocurren formas "eficientes"

Si es una función que realiza el cliente pues entonces si, la tiene que enviar el cliente. Si no necesita interacción con el cliente, el servidor puede empezar un contador para empezar la partida después de X tiempo una vez que se hayan unido los 4 jugadores al lobby.

Si el creador del lobby abandona el lobby, pues debería botar a los otros jugadores del lobby o cambiar el creador del lobby por algún otro jugador en el lobby (quizás el segundo jugador que se unió al lobby).

eimattz

Basicamente tendria que hacer un microservicio que chequee cada x tiempo si un array esta completo o no, y en base a eso ejecutar la funcion. Estoy en lo correcto?

MinusFour

Cita de: eimattz en  2 Julio 2021, 03:24 AM
Basicamente tendria que hacer un microservicio que chequee cada x tiempo si un array esta completo o no, y en base a eso ejecutar la funcion. Estoy en lo correcto?

No, si optas por está ruta simplemente revisas si el arreglo contiene 4 elementos a la hora de agregar un nuevo elemento. Entonces empiezas la partida.