Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Interacciones del cliente/servidor de juegos con Amazon GameLift Servers
Los componentes de la solución de alojamiento de Amazon GameLift Servers interactúan entre sí de formas específicas para ejecutar sesiones de juego en respuesta a la demanda de jugadores. En este tema, se describe cómo se comunican los componentes entre sí cuando el servidor de juegos está alojado en flotas de EC2 administradas por Amazon GameLift Servers, en flotas de Amazon GameLift Servers Anywhere autoadministradas o en una solución híbrida.
Algunos de los componentes de la solución de alojamiento son un servidor de juegos, el servicio de Amazon GameLift Servers, un servicio de backend en el cliente y un cliente de juegos. El servidor de juegos usa el SDK del servidor de Amazon GameLift Servers para interactuar con el servicio Amazon GameLift Servers. El servicio de backend utiliza la API de servicio de Amazon GameLift Servers (parte del SDK de AWS) para interactuar con el servicio en nombre del cliente de juego. Al unirse a una sesión de juego, el cliente de juego se conecta directamente a una sesión de juego mediante la dirección IP y el número de puerto exclusivos de la sesión de juego.
Diagrama de interacciones
El siguiente diagrama ilustra cómo interactúan los componentes de alojamiento del juego para que el servicio Amazon GameLift Servers pueda hacer un seguimiento del estado de la disponibilidad del servidor de juegos e iniciar sesiones de juego en respuesta a las demandas de jugadores.
Comportamientos de interacción
En las siguientes secciones, se describe la secuencia de eventos en cada una de las interacciones principales.
Inicialización de un proceso de servidor de juegos
En el arranque, un proceso de servidor de juegos establece la comunicación con el servicio Amazon GameLift Servers e indica que está preparado para alojar una sesión de juego.
-
Un nuevo proceso del ejecutable del servidor de juegos comienza a ejecutarse en un recurso de alojamiento.
-
El proceso del servidor de juego llama a las siguientes operaciones del SDK del servidor de forma secuencial:
-
InitSDK()para inicializar el SDK del servidor, autenticar el proceso del servidor y establecer la comunicación con el servicio Amazon GameLift Servers. -
ProcessReady(), para comunicar que todo está listo para alojar una sesión de juego. Esta llamada también muestra los datos de conexión del proceso, cuál es el juego que los clientes utilizan para conectarse a la sesión de juego, etc.
A continuación, el proceso del servidor espera a que lleguen peticiones del servicio Amazon GameLift Servers.
-
-
Amazon GameLift Servers actualiza el estado del proceso del servidor a
ACTIVEy disponible para alojar una nueva sesión de juego. -
Amazon GameLift Servers comienza a hacer de forma periódica la devolución de llamada
onHealthCheckpara solicitar el estado de los procesos del servidor. Estas llamadas continúan mientras el proceso del servidor permanece activo. En menos de un minuto, el proceso del servidor debe indicar si se encuentra o no en buen estado. Si el proceso del servidor indica que no se encuentra en buen estado o no responde, el servicio Amazon GameLift Servers cambiará, en algún momento, el estado activo del proceso del servidor, y dejará de enviar solicitudes para iniciar la sesión de juego.
Creación de una sesión de juego
El servicio Amazon GameLift Servers inicia una nueva sesión de juego en respuesta a una solicitud de un jugador para empezar a jugar.
-
Un jugador que usa el cliente de juego solicita unirse a una sesión de juego. En función de cómo gestione el juego el proceso de incorporación de un jugador, el cliente de juego le envía una solicitud al servicio de backend.
-
Si el proceso de ingreso de un jugador requiere iniciar una nueva sesión de juego, el servicio de backend envía una solicitud de nueva sesión de juego al servicio Amazon GameLift Servers. Esta solicitud llama a la operación de API de servicio
StartGameSessionPlacement(). (otra opción es que el servicio de backend llame aStartMatchmaking()oCreateGameSession()). -
El servicio Amazon GameLift Servers responde creando un nuevo ticket
GameSessionPlacementcon el estadoPENDING. Devuelve la información de ticket al servicio de backend, para que este pueda hacer un seguimiento del estado del ticket de ubicación y determinar el momento en el que la sesión de juego esté lista para los jugadores. Para obtener más información, consulte Configuración de la notificación de eventos para la ubicación de sesiones de juego.. -
El servicio Amazon GameLift Servers inicia el proceso de ubicación de la sesión de juego. Identifica cuáles son las flotas que se deben examinar, y busca en esas flotas un proceso de servidor activo que no esté alojando una sesión de juego. Al encontrar un proceso de servidor disponible, el servicio Amazon GameLift Servers hace lo siguiente:
-
Crea un objeto
GameSessioncon la configuración de la sesión de juego y los datos del jugador a partir de la solicitud de ubicación, y establece el estado enACTIVATING. -
Le pide al proceso del servidor que inicie una sesión de juego. El servicio invoca la devolución de llamada
onStartGameSessiondel proceso del servidor y pasa el objetoGameSession. -
Cambia el número de sesiones de juego del proceso del servidor a
1.
-
-
El proceso del servidor ejecuta la función de devolución de llamada
onStartGameSession. Cuando el proceso del servidor está listo para aceptar las conexiones de jugadores, llama a la operación del SDK del servidorActivateGameSession()y espera a que haya conexiones de jugadores. -
El servicio Amazon GameLift Servers actualiza el objeto
GameSessioncon la información de conexión para el proceso del servidor (tal y como se indica en la llamada aProcessReady()) y establece el estado de la sesión de juego enACTIVE. También actualiza el estado del ticketGameSessionPlacementenFULFILLED. -
El servicio de backend llama a
DescribeGameSessionPlacement()para comprobar el estado del ticket y obtener información sobre la sesión de juego. Cuando la sesión de juego está activa, el servicio de backend notifica al cliente de juego y transmite los datos de conexión de la sesión de juego. -
El cliente de juego utiliza la información de conexión para conectarse directamente con el proceso del servidor de juegos y unirse a la sesión de juego.
Adición de un jugador a un juego
Como característica opcional, un juego puede usar las sesiones de los jugadores para hacer un seguimiento de las conexiones de los jugadores a sesiones de juego. Las sesiones de jugador se pueden crear de forma individual o como parte de una solicitud de ubicación de sesión de juego.
-
El servicio de backend llama a la operación de la API del servicio
CreatePlayerSession()con un ID de sesión de juego. -
El servicio Amazon GameLift Servers comprueba el estado de la sesión de juego (debe ser
ACTIVE) y busca un espacio de jugador abierto en la sesión de juego. Si hay un espacio disponible, el servicio hace lo siguiente:-
Crea un objeto
PlayerSessionnuevo y establece el estado enRESERVED. -
Responde a la solicitud de servicio de backend con información de la sesión del jugador.
-
-
El servicio de backend pasa la información de la sesión del jugador al cliente de juego junto con los datos de conexión de la sesión de juego.
-
El cliente de juego utiliza los datos de conexión y el ID de sesión de jugador para conectarse directamente al proceso del servidor de juegos y unirse a la sesión de juego.
-
Cuando un cliente de juego intenta unirse, el proceso del servidor del juego llama a la operación
AcceptPlayerSession()de la API del servicio para validar el ID de sesión del jugador. A continuación, el proceso del servidor acepta o rechaza la conexión. -
El servicio Amazon GameLift Servers realiza una de las operaciones siguientes:
-
Si se acepta la conexión, Amazon GameLift Servers establece el estado de
PlayerSessionenACTIVEy transfiere laPlayerSessional proceso del servidor de juegos. -
Si el proceso del servidor de juego no llama a
AcceptPlayerSession()para el ID de sesión de jugador dentro de un período de tiempo determinado después de la solicitudCreatePlayerSession()original, el servicio Amazon GameLift Servers cambia el estadoPlayerSessionaTIMEDOUTy vuelve a abrir el espacio para jugadores en la sesión de juego.
-
Eliminación de un jugador
En el caso de los juegos que utilizan sesiones de jugadores, el proceso del servidor de juegos notifica al servicio Amazon GameLift Servers cuando un jugador se desconecta. El servicio utiliza esta información para hacer un seguimiento del estado de los espacios para jugadores en una sesión de juego, y puede permitir la entrada de nuevos jugadores en los espacios disponibles.
-
Un jugador se desconecta de la sesión de juego.
-
El proceso del servidor de juego detecta la conexión perdida y llama a la operación
RemovePlayerSession()del SDK del servidor. -
El servicio Amazon GameLift Servers cambia el estado de la sesión del jugador a
COMPLETEDy vuelve a abrir el espacio para jugadores en la sesión de juego.
Cierre de la sesión de juego
Al final de una sesión de juego, o al cerrar dicha sesión, el proceso del servidor notifica al servicio Amazon GameLift Servers el estado de la sesión de juego.
-
El proceso del servidor de juego finaliza la sesión de juego e inicia el cierre del proceso mediante una llamada a la operación
ProcessEnding()del SDK del servidor. -
El servicio Amazon GameLift Servers realiza lo siguiente:
-
Carga registros de sesión de juego en Amazon Simple Storage Service (Amazon S3).
-
Cambia el estado de la sesión del juego a
TERMINATED. -
Cambia el estado del proceso del servidor a
TERMINATED. -
Según el diseño de la solución de alojamiento, los nuevos recursos de alojamiento disponibles se asignan para ejecutar un nuevo proceso de servidor de juegos.
-