es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cola compartida entre servidores en Lua.

Estoy tratando de crear un sistema de “Búsqueda de jugadores” y tengo una tabla principal que es compartida entre múltiples servidores. Esa tabla incluye a todos los jugadores que están listos para jugar. ¿Cómo puedo crear un sistema para bloquear grupos aleatorios de jugadores juntos en una tabla separada para que los otros servidores no puedan tocar a los jugadores?

Mi principal problema es ¿qué pasa si ambos servidores intentan bloquear al mismo jugador al mismo tiempo?

Estoy usando el MessagingService de Roblox para esto: https://developer.roblox.com/en-us/api-reference/class/MessagingService No tengo un servidor de alojamiento principal y tampoco puedo crear uno.

TL; DR:

  • La cola está disponible para todos los servidores.
  • Cada servidor tiene su propio sistema de juego, es decir, todos los servidores pueden acceder a la cola y reunir jugadores al azar de esa cola.
  • ¿Cómo puedo contrarrestar el problema si varios servidores intentan recoger al mismo jugador al mismo tiempo?
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para resolver el problema de múltiples servidores intentando bloquear al mismo jugador al mismo tiempo, puede implementar un mecanismo de bloqueo utilizando el MessagingService de Roblox. Así es como puede hacerlo:

    1. Cuando un servidor solicita un grupo aleatorio de jugadores de la cola principal, envía un mensaje al servicio de mensajería con un ID único para esa solicitud.
    2. Antes de seleccionar los jugadores aleatorios de la cola principal, el servidor primero verifica si hay alguna solicitud pendiente con el mismo ID. Si las hay, entonces espera a que se complete la solicitud anterior o expira después de cierta duración.

    3. Una vez que el servidor ha confirmado que no hay solicitudes pendientes con el mismo ID, puede proceder a seleccionar un grupo aleatorio de jugadores de la cola principal y bloquearlos agregando sus IDs a una tabla separada que es única para ese servidor.

    4. El servidor luego envía un mensaje al servicio de mensajería con los IDs de los jugadores bloqueados y el ID único para la solicitud.

    5. Otros servidores que reciban el mensaje verifican si han bloqueado a alguno de los jugadores en el mensaje. Si lo han hecho, entonces liberan a esos jugadores de su tabla.

    6. Una vez que el servidor ha terminado su sistema de juego con los jugadores bloqueados, envía otro mensaje al servicio de mensajería con los IDs de los jugadores bloqueados y el ID único para la solicitud para liberarlos.

    Al implementar este mecanismo de bloqueo, puede asegurarse de que solo un servidor puede bloquear un grupo particular de jugadores a la vez, evitando conflictos entre servidores.

Comments are closed.