Adición de Amazon GameLift Servers al servidor de juegos con el SDK del servidor - Amazon GameLift Servers

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.

Adición de Amazon GameLift Servers al servidor de juegos con el SDK del servidor

En este tema se proporcionan instrucciones generales sobre la funcionalidad del SDK del servidor que debe añadir al código del servidor de juegos. Esta funcionalidad permite que los procesos del servidor de juegos se comuniquen con el servicio Amazon GameLift Servers. Sigue estas instrucciones para los servidores de juegos que planeas implementar en EC2 flotas Amazon GameLift Servers gestionadas, flotas de contenedores gestionadas o flotas de Anywhere.

Los procesos del servidor de juegos se comunican con el servicio Amazon GameLift Servers para recibir instrucciones del servicio e informar del estado de los procesos del servidor y del estado de las sesiones de juego. Para obtener información detallada sobre las interacciones entre los componentes de la solución de alojamiento de juegos (servidor del juego, servicio de backend, cliente del juego y Amazon GameLift Servers), consulte client/server Interacciones del juego con Amazon GameLift Servers.

Obtención del SDK del servidor

Para preparar el juego para el alojamiento, añada el SDK del servidor de Amazon GameLift Servers al proyecto de servidor de juegos. El SDK del servidor está disponible en varios idiomas. Para obtener más información sobre el soporte de herramientas para servidores de juegos, incluido el SDK del servidor, consulte Obtención de herramientas de desarrollo de Amazon GameLift Servers.

Descargue el SDK del servidor correspondiente a su lenguaje de desarrollo en github.com/amazon-gamelift. Puede encontrar repositorios para las distintas versiones del SDK del servidor, los complementos y otras herramientas de desarrollo.

nota

Si está desarrollando con Unreal Engine o Unity, descargue el complemento de Amazon GameLift Servers para estos motores de juegos. El SDK del servidor está integrado y listo para usarse. Consulte estos enlaces para obtener información adicional:

Referencias de la API del SDK del servidor:

Inicialización del proceso del servidor

Añada código para establecer la comunicación con el servicio Amazon GameLift Servers e informar cuando el proceso del servidor esté listo para alojar una sesión de juego. Este código debe ejecutarse antes que cualquier código de Amazon GameLift Servers.

  1. Inicialice un cliente de API de Amazon GameLift Servers mediante una llamada a InitSdk(). Si estás preparando tu servidor de juegos para que funcione en EC2 flotas Amazon GameLift Servers gestionadas, usa el predeterminado InitSDK()(C++) (C#) (Unreal) (Go) (C++) (C#) sin parámetros. El cliente de API se encarga de la conexión al servicio Amazon GameLift Servers en su nombre.

    Si está preparando el servidor de juegos para usarlo en una flota de Amazon GameLift Servers Anywhere:

    Inicialice el cliente de API de Amazon GameLift Servers llamando a InitSdk() con los siguientes valores ServerParameters:

    • La URL del WebSocket que se utiliza para conectarse al servidor de juegos.

    • El ID del proceso utilizado para alojar su servidor de juegos.

    • El ID del proceso utilizado para alojar los procesos del servidor de juegos.

    • El ID de la flota que contiene su recurso de computación de Amazon GameLift Servers Anywhere.

    • El token de autorización generado por la operación GetComputeAuthToken de Amazon GameLift Servers.

  2. Notifique al servicio que el proceso del servidor está listo para alojar una sesión de juego. Llame a ProcessReady() (C++) (C#) (Unreal) (Go) con los siguientes ProcessParameters. Cada proceso del servidor de juegos debe llamar a ProcessReady() una sola vez.

    • Número de puerto del proceso del servidor. Cuando el proceso del servidor inicia una sesión de juego, proporciona el puerto al servicio Amazon GameLift Servers, que actualiza la información de la sesión de juego. El juego puede recuperar esta información y proporcionarla a los clientes del juego, que la utilizan para conectarse al proceso del servidor y unirse a la sesión de juego.

    • Las ubicaciones de los archivos que desea que Amazon GameLift Servers almacene para usted. Pueden incluir registros de las sesiones de juego y otros archivos que el proceso del servidor genera durante una sesión de juego. Aunque Amazon GameLift Servers guarda estos archivos temporalmente en el equipo en el que se ejecuta el proceso del servidor, solo están disponibles hasta que la instancia se cierra. Puedes acceder a los archivos almacenados a través de la Amazon GameLift Serversconsola o llamando a la Amazon GameLift Servers API operation (). GetGameSessionLogUrl

      Si está preparando el servidor de juegos para usarlo en una flota de contenedores administrada por Amazon GameLift Servers:

      No es necesario que especifique parámetros de registro para las flotas de contenedores. En su lugar, envíe los datos de las sesiones de juego y otros datos de registro a la salida estándar. Las flotas de contenedores capturan automáticamente toda la salida estándar de los contenedores como un flujo de registro.

    • Las siguientes funciones de devolución de llamada permiten a Amazon GameLift Servers enviar mensajes o peticiones a un proceso del servidor de juegos. Usted debe implementar cada una de estas funciones en el código del servidor de juegos. Para obtener más información, consulte ProcessParameters(C++) (C#) (Unreal) (Go) .

      • (Opcional) onHealthCheck: Amazon GameLift Servers llama a esta función con frecuencia para solicitar al servidor un informe del estado.

      • onStartGameSession— Amazon GameLift Servers llama a esta función en respuesta a la solicitud del cliente CreateGameSession().

      • onProcessTerminate: Amazon GameLift Servers fuerza la detención del proceso del servidor, lo que permite que se cierre sin problemas.

      • (Opcional) onUpdateGameSession: Amazon GameLift Servers ofrece un objeto de sesión de juego actualizado al servidor de juegos o proporciona una actualización de estado de una solicitud de reposición de emparejamiento. La característica de reposición de FlexMatch requiere esta devolución de llamada.

    También puede configurar un servidor de juegos para que pueda acceder de forma segura a otros recursos de AWS que le pertenezcan o que estén bajo su control. Para obtener más información, consulte Conecta tu servidor de juegos Amazon GameLift Servers alojado a otros AWS recursos.

Notificación del estado del proceso del servidor (opcional)

Añada código a su servidor de juegos para implementar la función de devolución de llamada onHealthCheck(). Amazon GameLift Servers invoca este método de devolución de llamadas periódicamente para recopilar métricas de estado. Al implementar esta función de devolución de llamada, realice el siguiente procedimiento:

  • Evalúe el estado del proceso del servidor. Por ejemplo, puede informar de que el proceso del servidor no está en buen estado si alguna dependencia externa ha fallado.

  • Complete la evaluación del estado y responda a la devolución de llamada en un plazo de 60 segundos. Si Amazon GameLift Servers no recibe una respuesta durante ese periodo, considerará automáticamente que el proceso del servidor no está funcionando correctamente.

  • Devuelva un valor booleano: true para buen estado y false para mal estado.

Si no implementa una devolución de llamada de comprobación de estado, Amazon GameLift Servers considerará que el proceso del servidor está en buen estado a menos que el servidor no responda.

El servicio Amazon GameLift Servers utiliza el estado de los procesos del servidor para finalizar los procesos que no funcionan correctamente y liberar recursos. Si se sigue informando de que un proceso del servidor no funciona correctamente o no responde a tres comprobaciones de estado consecutivas, el servicio puede cerrar el proceso e iniciar uno nuevo. El servicio recopila métricas sobre el estado de los procesos de servidor de una flota.

(Opcional) Obtención de un certificado TLS

Si el proceso del servidor se ejecuta en una flota que tiene activada la generación de certificados TLS, puede recuperar el certificado TLS para establecer una conexión segura con un cliente de juegos y cifrar la comunicación cliente/servidor. En la instancia se almacena una copia del certificado. Para obtener la ubicación del archivo, llame a GetComputeCertificate() (C++) (C#) (Unreal) (Go) .

Inicio de una sesión de juego

Añada código para implementar la función de devolución de llamada onStartGameSession. Amazon GameLift Servers invoca esta devolución de llamada para iniciar una sesión de juego en el proceso del servidor.

La onStartGameSession función toma un GameSessionobjeto como parámetro de entrada. Este objeto incluye información clave de la sesión de juego, como el número máximo de jugadores. También puede incluir datos del juego y de los jugadores. Durante el proceso de implementación de la función se deben realizar las siguientes tareas:

  • Inicie acciones para crear una nueva sesión de juego en función de las propiedades de GameSession. Como mínimo, el servidor de juegos debe asociar el ID de sesión del juego, al que los clientes del juego hacen referencia cuando se conectan al proceso del servidor.

  • Procese los datos del juego y de los jugadores según sea necesario. Esos datos se encuentran en el objeto GameSession.

  • Informe al servicio Amazon GameLift Servers cuando haya una nueva sesión de juego lista para aceptar jugadores. Llame a la operación ActivateGameSession() de la API del servidor (C++) (C#) (Unreal) (Go) . En respuesta a una llamada realizada correctamente, el servicio cambia el estado de la sesión de juego a ACTIVE.

Validación de un jugador nuevo (opcional)

Si está monitorizando el estado de las sesiones de jugador, añada código para validar a los nuevos jugadores cuando se conecten a un servidor de juegos. Amazon GameLift Servers hace un seguimiento de los jugadores actuales y de los espacios disponibles en las sesiones de juego.

Para la validación, un cliente de juego que intente unirse a una sesión de juego debe incluir un identificador de sesión de jugador. Amazon GameLift Serversgenera este ID cuando el juego inicia nuevas sesiones de juego llamando a StartGameSessionPlacement() o StartMatchmaking(). En el caso de estas solicitudes, se reserva un espacio libre en una sesión de juego para la sesión del jugador.

Cuando el proceso del servidor de juegos recibe una solicitud de conexión del cliente de juego, llama a AcceptPlayerSession() (C++) (C#) (Unreal) (Go) con el ID de sesión de jugador. Como respuesta, Amazon GameLift Servers comprueba que el ID de sesión del jugador se corresponde con una ranura abierta reservada en la sesión de juego. Una vez que Amazon GameLift Servers valida el ID de sesión del jugador, el proceso del servidor acepta la conexión. A continuación, el jugador puede unirse a la sesión de juego. Si Amazon GameLift Servers no valida el ID de sesión del jugador, el proceso del servidor rechaza la conexión.

Notificación de la finalización de una sesión de jugador (opcional)

Si está realizando un seguimiento del estado de las sesiones de los jugadores, añada un código para informar a Amazon GameLift Servers cuando un jugador abandone la sesión de juego. Este código debería ejecutarse siempre que el proceso del servidor detecte una conexión interrumpida. Amazon GameLift Servers utiliza esta notificación para realizar un seguimiento de los jugadores actuales y de los espacios disponibles en la sesión de juego.

Para gestionar las conexiones interrumpidas, añada una llamada a la operación RemovePlayerSession() de la API del servidor (C++) (C#) (Unreal) (Go) con el ID de sesión de jugador correspondiente.

Finalización de una sesión de juego

Añada código a la secuencia de cierre del proceso del servidor para informar a Amazon GameLift Servers cuando finalice una sesión de juego. Para reciclar y actualizar los recursos de alojamiento, cierre los procesos del servidor una vez finalizada la sesión de juego.

Al inicio del código de cierre del proceso del servidor, llame a la operación ProcessEnding() de la API del servidor (C++) (C#) (Unreal) (Go) g . Esta llamada informa a Amazon GameLift Servers de que el proceso del servidor se está cerrando. Amazon GameLift Servers cambia el estado de la sesión de juego y del proceso del servidor a TERMINATED. Después de llamar a ProcessEnding(), es seguro que el proceso se cierre.

Respuesta a una notificación de cierre del proceso del servidor

Añada código para cerrar el proceso del servidor como respuesta a una notificación de Amazon GameLift Servers. El servicio envía esta notificación cuando el proceso del servidor informa constantemente de que no funciona correctamente o si la instancia en la que se está ejecutando el proceso del servidor está finalizando. Amazon GameLift Servers puede detener una instancia como parte de un evento de reducción vertical de la capacidad o como respuesta a una interrupción de una instancia de spot. La interrupción de una instancia de spot proporciona un aviso con dos minutos de antelación, lo que proporciona al proceso del servidor tiempo para desconectar a los jugadores de forma correcta, mantener los datos de estado del juego y realizar otras tareas de limpieza.

Para gestionar una notificación de cierre, realice los siguientes cambios en el código del servidor de juegos:

  • Implemente la función de devolución de llamada onProcessTerminate() (C++) (C#) (Unreal) (Go) . Esta función debe llamar al código que cierra el proceso del servidor.

  • Llame a la operación de la API del servidor GetTerminationTime() (C++) (C#) (Unreal) (Go) desde el código de cierre del servidor de juegos. Si Amazon GameLift Servers ha emitido una llamada para detener el proceso del servidor, GetTerminationTime() devuelve el tiempo de finalización estimado.

  • Al inicio del código de cierre del servidor de juegos, llame a la operación ProcessEnding() de la API del servidor (C++) (C#) (Unreal) (Go) . Esta llamada notifica al servicio Amazon GameLift Servers que el proceso del servidor se va a apagar. A continuación, el servicio cambia el estado del proceso del servidor aTERMINATED. Después de llamar a ProcessEnding(), es seguro que el proceso se cierre.