Adición de Amazon GameLift al servidor de juegos - Amazon GameLift

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 al servidor de juegos

Su servidor de juegos personalizado debe comunicarse con Amazon GameLift, ya que cada proceso del servidor de juegos debe poder responder a los eventos que inicie Amazon GameLift. El servidor de juegos también debe mantener a Amazon GameLift informado sobre el estado del proceso del servidor y las conexiones de los jugadores. Para obtener más información sobre cómo el servidor de juegos, el servicio de backend, el cliente del juego y Amazon GameLift trabajan juntos para administrar el alojamiento de juegos, consulte Interacciones entre Amazon GameLift y el servidor de cliente del juego.

Para preparar el servidor de juegos para que interactúe con Amazon GameLift, añada el SDK de servidor de Amazon GameLift en el proyecto del servidor de juegos y compile la funcionalidad descrita en este tema. El SDK del servidor está disponible en varios idiomas. Para obtener más información sobre el SDK del servidor de Amazon GameLift, consulte Soporte de desarrollo con Amazon GameLift.

Referencias de la API del SDK del servidor:

Inicialización del proceso del servidor

Añada código para establecer la comunicación con Amazon GameLift e informar de que 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.

  1. Llame a InitSdk() para iniciar el cliente de la API de Amazon GameLift. Para inicializar un proceso de servidor en un recurso informático de Amazon GameLift Anywhere, llame a InitSdk() con los siguientes 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 de GameLift que contiene el entorno informático de Amazon GameLift Anywhere.

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

    nota

    Para iniciar un servidor de juegos en una instancia de Amazon EC2 administrada de Amazon GameLift, cree sus ServerParameters mediante el constructor predeterminado InitSDK() (C++) (C#) (Unreal) (sin parámetros). Amazon GameLift configura el entorno informático y se conecta automáticamente a Amazon GameLift por usted.

  2. Notifique a Amazon GameLift que el proceso del servidor de juegos está listo para alojar una sesión de juego. Llame a ProcessReady() (C++) (C#) (Unreal) con la siguiente información. Tenga en cuenta que debe llamar a ProcessReady() solo una vez por proceso del servidor.

    • El número de puerto que utiliza el proceso del servidor. El servicio de backend proporciona el número de puerto y una dirección IP a los clientes del juego para que se conecten al proceso del servidor y se unan a una sesión de juego.

    • La ubicación de los archivos, como los registros de sesiones de juegos, que quiere que Amazon GameLift retenga. El proceso del servidor genera esos archivos durante una sesión de juego. Se almacenan temporalmente en la instancia en la que se ejecuta el proceso del servidor y se pierden cuando la instancia se cierra. Todos los archivos que publique se cargarán en Amazon GameLift. Puede acceder a los archivos a través de la consola de Amazon GameLift o llamando a la operación de la API de Amazon GameLift GetGameSessionLogUrl().

    • Se procesarán los nombres de las funciones de devolución de llamadas a las que Amazon GameLift puede llamar en su servidor. El servidor de juegos debe implementar las siguientes funciones. Para obtener más información, consulte (C++) (C#) (Unreal) .

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

      • onStartGameSession: Amazon GameLift llama a esta función como respuesta a la solicitud de cliente CreateGameSession().

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

      • onUpdateGameSession (opcional): Amazon GameLift 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 Reposición de FlexMatch requiere esta devolución de llamada.

    También puede configurar un servidor de juegos para acceder de forma segura a los recursos de AWS que le pertenecen o que controla. Para obtener más información, consulte Comunicación con otros recursos de AWS de sus flotas.

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 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 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 considerará que el proceso del servidor está en buen estado a menos que el servidor no responda.

Amazon GameLift 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, Amazon GameLift puede cerrar el proceso e iniciar uno nuevo. Amazon GameLift recopila métricas sobre el estado de los procesos de los servidores de una flota.

Obtención de un certificado TLS (opcional)

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) .

Inicio de una sesión de juego

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

La función onStartGameSession toma un objeto GameSession 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 a Amazon GameLift cuando haya una nueva sesión de juego lista para aceptar jugadores. Llame a la operación de la API del servidor ActivateGameSession()(C++) (C#) (Unreal) (C++)Unreal). En respuesta a una llamada realizada correctamente, Amazon GameLift cambia el estado de la sesión de juego a ACTIVE.

Validación de un jugador nuevo (opcional)

Si realiza un seguimiento del estado de las sesiones de los jugadores, añada un código para validar un jugador nuevo cuando se conecte a un servidor de juegos. Amazon GameLift realiza un seguimiento de los jugadores actuales y de las ranuras de sesión de juego disponibles.

Para la validación, el cliente del juego que solicite acceso a la sesión de juego debe incluir un ID de sesión del jugador. Amazon GameLift genera automáticamente este ID cuando un jugador solicita unirse a un juego mediante StartGamessionPlacement() o StartMatchmaking(). La sesión del jugador reserva entonces un espacio libre en una sesión de juego.

Cuando el proceso del servidor de juegos recibe una solicitud de conexión con el cliente del juego, llama a AcceptPlayerSession() (C++) (C#) (Unreal) (C++) con el ID de sesión del jugador. Como respuesta, Amazon GameLift 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 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 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 cuando un jugador abandone la sesión de juego. Este código debe ejecutarse siempre que el proceso del servidor detecte la interrupción de una conexión. Amazon GameLift utiliza esta notificación para realizar un seguimiento de los jugadores actuales y de las ranuras disponibles en la sesión de juego.

Para gestionar las conexiones interrumpidas, añada en el código una llamada a la operación de la API del servidor RemovePlayerSession() (C++) (C#) (Unreal) (C++) con el ID de sesión del 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 cuando finalice una sesión de juego. Para reciclar y actualizar los recursos de alojamiento, Amazon GameLift cierra los procesos del servidor una vez finalizada la sesión de juego.

Al iniciar el código de cierre del proceso del servidor, llame a la operación de la API del servidor ProcessEnding() (C++) (C#) (Unreal) . Esta llamada informa a Amazon GameLift de que el proceso del servidor se va a apagar. Amazon GameLift cambia el estado de la sesión del juego y el estado 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 un código para cerrar el proceso del servidor como respuesta a una notificación de Amazon GameLift. Amazon GameLift envía eta 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 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.

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(). Esta función debe llamar al código que apaga el proceso del servidor. Cuando Amazon GameLift invoca esta operación, las interrupciones de instancias de spot se notifican con dos minutos de antelación. El aviso 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.

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

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