Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: eimattz en 1 Julio 2021, 11:57 am



Título: problema con sistema de queue, misma funcion se ejecuta N veces. (N = usuarios)
Publicado por: eimattz en 1 Julio 2021, 11:57 am
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


Título: Re: problema con sistema de queue, misma funcion se ejecuta N veces. (N = usuarios)
Publicado por: MinusFour en 1 Julio 2021, 15:23 pm
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".


Título: Re: problema con sistema de queue, misma funcion se ejecuta N veces. (N = usuarios)
Publicado por: 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"


Título: Re: problema con sistema de queue, misma funcion se ejecuta N veces. (N = usuarios)
Publicado por: MinusFour en 2 Julio 2021, 00:12 am
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).


Título: Re: problema con sistema de queue, misma funcion se ejecuta N veces. (N = usuarios)
Publicado por: 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?


Título: Re: problema con sistema de queue, misma funcion se ejecuta N veces. (N = usuarios)
Publicado por: MinusFour en 2 Julio 2021, 04:50 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.


Título: Re: problema con sistema de queue, misma funcion se ejecuta N veces. (N = usuarios)
Publicado por: eimattz en 5 Enero 2022, 18:56 pm
Solucion:

Para poder ejecutar la creación de recursos de forma idempotente, el cliente (que puede ser un frontend u otro microservicio o aplicación, genere el identificador (puedes usar un uuid estandar para ello). Esto lo que permite es poder lanzar la misma operación las veces que quieras, porque si el recurso ya existe, como estás pasando el mismo id, no se crearía otro distinto.