Autor
|
Tema: problema con sistema de queue, misma funcion se ejecuta N veces. (N = usuarios) (Leído 4,068 veces)
|
eimattz
Desconectado
Mensajes: 11
|
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
|
|
« Última modificación: 1 Julio 2021, 12:02 pm por eimattz »
|
En línea
|
|
|
|
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".
|
|
|
En línea
|
|
|
|
eimattz
Desconectado
Mensajes: 11
|
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"
|
|
|
En línea
|
|
|
|
MinusFour
|
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).
|
|
|
En línea
|
|
|
|
eimattz
Desconectado
Mensajes: 11
|
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?
|
|
|
En línea
|
|
|
|
MinusFour
|
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.
|
|
|
En línea
|
|
|
|
eimattz
Desconectado
Mensajes: 11
|
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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Web Service que se ejecuta varias veces al mismo tiempo
Java
|
Recca
|
1
|
2,789
|
9 Junio 2014, 18:43 pm
por Recca
|
|
|
Consulta - Llamar función dentro de su misma función
Programación C/C++
|
DeMoNcRaZy
|
4
|
5,330
|
8 Marzo 2015, 17:29 pm
por DeMoNcRaZy
|
|
|
[AYUDA] Hacer que una función se llame a sí misma (Una parte de ella misma)
Programación C/C++
|
LoQueSeaPI
|
1
|
2,255
|
27 Septiembre 2016, 01:04 am
por engel lex
|
|
|
[Solucionado]Problema con función, crea e imprime datos pero no ejecuta.
« 1 2 »
PHP
|
deadfrommayhem
|
13
|
8,239
|
6 Agosto 2017, 00:07 am
por deadfrommayhem
|
|
|
[Pregunta]: ¿Cómo puedo usar una función en otra función en la misma clase?
Desarrollo Web
|
Leguim
|
0
|
2,280
|
13 Junio 2020, 10:35 am
por Leguim
|
|