Realización de una prueba de integración con Amazon GameLift Local - 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.

Realización de una prueba de integración con Amazon GameLift Local

nota

Utilice este procedimiento de prueba si usa una versión del SDK del servidor de Amazon GameLift 4.x o anterior. El paquete del SDK del servidor incluye una versión compatible de Amazon GameLift Local. Si utiliza la versión 5.x del SDK del servidor, consulte Realización de una prueba de integración con flotas de Amazon GameLift Anywhere para la prueba local con una flota de Amazon GameLift Anywhere.

Utilice Amazon GameLift Local para ejecutar una versión limitada del servicio de Amazon GameLift administrado en un dispositivo local y probar cómo se integra el juego. Esta herramienta es útil al realizar el desarrollo iterativo en la integración del juego. La alternativa, que es cargar cada nueva compilación en Amazon GameLift y configurar una flota para alojar el juego, puede tardar 30 minutos o más cada vez.

Con Amazon GameLift Local, puede verificar los siguientes aspectos:

  • Que el servidor de juegos se integra correctamente con el SDK del servidor y se comunica de forma adecuada con el servicio de Amazon GameLift para empezar nuevas sesiones de juego, aceptar jugadores nuevos e informar sobre el estado.

  • Que el cliente de juego está integrado correctamente con el SDK de AWS para Amazon GameLift y que puede recuperar información sobre sesiones de juego existentes, iniciar sesiones de juego nuevas, conectar jugadores a juegos y conectarse a la sesión de juego.

Amazon GameLift Local es una herramienta de línea de comandos que inicia una versión autónoma del servicio de Amazon GameLift Local administrado. Amazon GameLift Local también proporciona un registro de evento de ejecución de la inicialización del proceso del servidor, comprobaciones de estado y llamadas y respuestas de la API. Amazon GameLift Local reconoce un subconjunto de las acciones del SDK de AWS para Amazon GameLift. Puede realizar llamadas desde la AWS CLI o desde el cliente de juego. Todas las acciones de la API que se ejecutan localmente lo hacen de la misma forma que en el servicio web de Amazon GameLift.

Cada proceso del servidor solo debe alojar una sesión de juego. La sesión de juego es el archivo ejecutable que se utiliza para conectarse a Amazon GameLift Local. Cuando se complete la sesión de juego, debe llamar a GameLiftServerSDK::ProcessEndning y salir del proceso. Al realizar pruebas de forma local con Amazon GameLift Local, puede iniciar varios procesos del servidor. Cada proceso se conectará a Amazon GameLift Local. A continuación, podrá crear una sesión de juego para cada proceso del servidor. Cuando finalice la sesión de juego, el proceso del servidor de juegos debería cerrarse. A continuación, debe iniciar manualmente otro proceso de servidor.

Amazon GameLift local admite las siguientes API:

  • CreateGameSession

  • CreatePlayerSession

  • CreatePlayerSessions

  • DescribeGameSessions

  • DescribePlayerSessions

Configuración de Amazon GameLift Local

Amazon GameLift Local se suministra en un archivo .jar ejecutable que se incluye en el SDK del servidor. Se puede ejecutar en Windows o Linux y utilizarse con cualquier idioma compatible con Amazon GameLift.

Antes de ejecutar Local, también debe tener instalado lo siguiente.

  • Una compilación del SDK del servidor de Amazon GameLift de las versiones 3.1.5 a la 4.x.

  • Java 8

Prueba de un servidor de juegos

Si solo desea probar el servidor de juegos, puede utilizar la AWS CLI para simular llamadas del cliente de juego al servicio de Amazon GameLift Local. De este modo, se verifica que el servidor de juegos se comporta según lo esperado:

  • El servidor de juegos se inicia correctamente e inicializa el SDK del servidor de Amazon GameLift.

  • Como parte del proceso de lanzamiento, el servidor de juegos notifica a Amazon GameLift que el servidor está listo para alojar sesiones de juego.

  • El servidor de juegos envía estados a Amazon GameLift cada minuto mientras se ejecuta.

  • El servidor de juegos responde a las solicitudes para iniciar una sesión de juego nueva.

  1. Inicie Amazon GameLift Local.

    Abra una ventana de símbolo del sistema, vaya al directorio que contiene el archivo GameLiftLocal.jar y ejecútelo. De forma predeterminada, Local atiende a las solicitudes de clientes de juego en el puerto 8080. Para especificar un número de puerto diferente, utilice el parámetro -p, tal y como se muestra en el ejemplo siguiente:

    java -jar GameLiftLocal.jar -p 9080

    En cuanto Local arranque, verá los registros que indican que se iniciaron dos servidores locales, uno que atiende al servidor de juegos y otro al cliente de juego o a la AWS CLI. Los registros continúan informando sobre la actividad de los dos servidores locales, incluida la comunicación a y desde los componentes de juego.

  2. Inicie el servidor de juegos.

    Arranque el servidor de juegos integrado en Amazon GameLift localmente. No es necesario cambiar el punto de enlace del servidor de juegos.

    En la ventana de símbolo del sistema de Local, los mensajes de registro indican que el servidor de juegos se ha conectado al servicio de Amazon GameLift Local. Esto significa que el servidor de juegos ha inicializado correctamente el SDK del servidor de Amazon GameLift (con InitSDK()). Ha llamado a ProcessReady() con las rutas de registro que se muestran y, en caso de éxito, está listo para alojar una sesión de juego. Mientras se ejecuta el servidor de juegos, Amazon GameLift registra cada informe de estado del servidor de juegos. El siguiente ejemplo de mensajes de registro muestra un servidor de juegos integrado correctamente:

    16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK connected: /127.0.0.1:64247 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK pid is 17040, sdkVersion is 3.1.5 and sdkLanguage is CSharp 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - NOTE: Only SDK versions 3.1.5 and above are supported in GameLiftLocal! 16:50:53,451 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady received from: /127.0.0.1:64247 and ackRequest requested? true 16:50:53,543 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady data: logPathsToUpload: "C:\\game\\logs" logPathsToUpload: "C:\\game\\error" port: 1935 16:50:53,544 INFO || - [HostProcessManager] nioEventLoopGroup-3-1 - Registered new process true, true, 16:50:53,558 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onReportHealth received from /127.0.0.1:64247 with health status: healthy

    A continuación se presentan posibles mensajes de error y advertencia:

    • Error: «ProcessReady no encontró un proceso con pID: <ID de proceso>. ¿Se ha invocado InitSDK()?»

    • Advertencia: «El estado del proceso ya existe para el proceso con pID: <ID de proceso>. ¿Se ha invocado ProcessReady(...) más de una vez?»

  3. Inicie la AWS CLI.

    En cuanto el servidor de juegos llame a ProcessReady() correctamente, podrá comenzar a realizar llamadas de cliente. Abra una ventana de símbolo del sistema y empiece con la herramienta AWS CLI. De forma predeterminada, la AWS CLI utiliza el punto de conexión de servicio web de Amazon GameLift. Debe anularlo con el punto de enlace de Local en cada solicitud que emplee el parámetro --endpoint-url, tal y como se muestra en el siguiente ejemplo.

    AWS gamelift describe-game-sessions --endpoint-url http://localhost:9080 --fleet-id fleet-123

    En la ventana de símbolo del sistema de la AWS CLI, los comandos de AWS gamelift generan respuestas similares a las documentadas en la Referencia de comandos de la AWS CLI.

  4. Cree una sesión de juego.

    Con la AWS CLI, envíe una solicitud CreateGameSession(). La solicitud debería seguir la sintaxis esperada. Para Local, el parámetro FleetId puede adaptarse a cualquier cadena válida (^fleet-\S+).

    AWS gamelift create-game-session --endpoint-url http://localhost:9080 --maximum-player-session-count 2 --fleet-id fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d

    En la ventana de símbolo del sistema de Local, los mensajes de registro indican que Amazon GameLift Local ha enviado una devolución de la llamada onStartGameSession al servidor de juegos. Si se crea una sesión de juego correctamente, el servidor de juegos responderá llamado a ActivateGameSession.

    13:57:36,129 INFO || - [SDKInvokerImpl] Thread-2 - Finished sending event to game server to start a game session: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6. Waiting for ack response.13:57:36,143 INFO || - [SDKInvokerImpl] Thread-2 - Received ack response: true13:57:36,144 INFO || - [CreateGameSessionDispatcher] Thread-2 - GameSession with id: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6 created13:57:36,227 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate received from: /127.0.0.1:60020 and ackRequest requested? true13:57:36,230 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate data: gameSessionId: "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890"

    En la ventana de la AWS CLI, Amazon GameLift responde con un objeto de sesión de juego que incluye un ID de sesión de juego. Observe que el estado de la nueva sesión de juego es Activating. El estado cambia a Active cuando el servidor de juegos invoca a ActivateGameSession. Si desea ver el estado modificado, utilice la AWS CLI para llamar a DescribeGameSessions().

    { "GameSession": { "Status": "ACTIVATING", "MaximumPlayerSessionCount": 2, "FleetId": "fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "GameSessionId": "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890", "IpAddress": "127.0.0.1", "Port": 1935 } }

Prueba de un servidor y un cliente de juegos

Para comprobar la integración total del juego, incluidos los jugadores conectados a los juegos, puede ejecutar tanto el servidor como el cliente de juego localmente. De este modo podrá realizar llamadas programáticas desde su cliente de juego a Amazon GameLift Local. Puede verificar las siguientes acciones:

  • El cliente de juego está realizando correctamente solicitudes del SDK de AWS al servicio de Amazon GameLift Local, incluida la creación de sesiones de juego, la recuperación de información sobre sesiones de juego existentes y la creación de sesiones de jugador.

  • El servidor de juegos está validando jugadores correctamente al intentar conectarse a una sesión de juego. Para validar los jugadores, el servidor de juego puede recuperar datos de los jugadores (si están implementados).

  • El servidor de juegos informa sobre la pérdida de la conexión cuando un jugador abandona el juego.

  • El servidor de juegos informa sobre la finalización de una sesión de juego.

  1. Inicie Amazon GameLift Local.

    Abra una ventana de símbolo del sistema, vaya al directorio que contiene el archivo GameLiftLocal.jar y ejecútelo. De forma predeterminada, Local atiende a las solicitudes de clientes de juego en el puerto 8080. Para especificar un número de puerto diferente, utilice el parámetro -p, tal y como se muestra en el ejemplo siguiente.

    ./gamelift-local -p 9080

    En cuanto Local arranque, verá los registros que indican que se iniciaron dos servidores locales, uno que atiende al servidor de juegos y otro al cliente de juego o a la AWS CLI.

  2. Inicie el servidor de juegos.

    Arranque el servidor de juegos integrado en Amazon GameLift localmente. Consulte Prueba de un servidor de juegos para obtener más información acerca de los registros de mensajes.

  3. Configure su cliente de juego para Local e inícielo.

    Para utilizar el cliente de juego con el servicio de Amazon GameLift Local, debe realizar los siguientes cambios en la configuración del cliente de juego, tal y como se describe en Configura Amazon GameLift en un servicio de back-end:

    • Modifique el objeto ClientConfiguration para que apunte hacia el punto de enlace de Local, por ejemplo http://localhost:9080.

    • Defina un valor de ID de la flota de destino. Para Local, no se requiere un ID de flota real; defina la flota de destino con cualquier cadena válida (^fleet-\S+), como fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d.

    • Defina las credenciales de AWS. Para Local, no requiere credenciales de AWS reales, de modo que puede definir la clave de acceso y la clave secreta para cualquier cadena.

    En la ventana de símbolo del sistema de Local, después de iniciar el cliente de juego, los mensajes de registro deberían indicar que ha inicializado GameLiftClient y que se comunica correctamente con el servicio de Amazon GameLift.

  4. Pruebe las llamadas del cliente de juego al servicio de Amazon GameLift.

    Compruebe que el cliente de juego realiza correctamente alguna o todas las llamadas a la API siguientes:

    En la ventana de símbolo del sistema de Local, solo las llamadas a CreateGameSession() resultan en mensajes de registro. Los mensajes de registro muestran el momento en el que Amazon GameLift Local solicita al servidor de juegos que inicie una sesión de juego (devolución de llamada onStartGameSession) y obtiene una ActivateGameSession correcta cuando el servidor de juegos lo invoca. En la ventana de la AWS CLI, todas las llamadas a la API generan respuestas o mensajes de error tal y como se documenta.

  5. Compruebe que el servidor de juegos valida las conexiones de jugadores nuevas.

    Después de crear una sesión de juego y una sesión de jugador, establezca una conexión directa con la sesión de juego.

    En la ventana de símbolo del sistema de Local, los mensajes de registro deberían mostrar que el servidor de juegos ha enviado una solicitud AcceptPlayerSession() para validar la conexión de jugadores nueva. Si utiliza la AWS CLI para llamar a DescribePlayerSessions(), el estado de la sesión de jugador debería cambiar de Reserved a Active.

  6. Verifique que el servidor de juegos informe sobre el estado del juego y del jugador al servicio de Amazon GameLift.

    Para que Amazon GameLift administre la demanda de los jugadores y notifique correctamente las métricas, el servidor de juegos debe informar sobre varios estados a Amazon GameLift. Compruebe que Local registra los eventos relacionados con las acciones siguientes. Es posible que también desee utilizar la AWS CLI para realizar un seguimiento de los cambios de estado.

    • El jugador se desconecta de una sesión de juego: los mensajes de registro de Amazon GameLift Local deberían mostrar que el servidor de juegos llama a RemovePlayerSession(). Una llamada de la AWS CLI a DescribePlayerSessions() debería mostrar un cambio de estado de Active a Completed. También puede llamar a DescribeGameSessions() para comprobar que el recuento de jugadores actual de la sesión de juego resulta en un jugador menos.

    • La sesión de juego finaliza: los mensajes de registro de Amazon GameLift Local deberían mostrar que el servidor de juegos llama a TerminateGameSession().

      nota

      La guía anterior consistía en llamar a TerminateGameSession() al finalizar una sesión de juego. Este método ha quedado obsoleto en la versión 4.0.1 del SDK de Amazon GameLift Server. Consulte Finalización de una sesión de juego.

    • El proceso del servidor ha finalizado: los mensajes de registro de Amazon GameLift Local deberían mostrar que el servidor de juegos llama a ProcessEnding(). Una llamada de la AWS CLI a DescribeGameSessions() debería mostrar un cambio de estado de Active a Terminated (o Terminating).

Variaciones de Local

Al utilizar Amazon GameLift Local, tenga en cuenta los siguientes aspectos:

  • A diferencia del servicio web de Amazon GameLift, Local no realiza el seguimiento del estado del servidor ni inicia la devolución de la llamada onProcessTerminate. Local simplemente deja de registrar los informes de estado del servidor de juegos.

  • Para realizar llamadas al SDK de AWS, los ID de la flota no están validados y puede tratarse de cualquier valor de cadena que cumpla los requisitos de parámetro (^fleet-\S+).

  • Los ID de sesión de juego creados con Local tienen una estructura diferente. Incluyen la cadena local, tal y como se muestra aquí:

    arn:aws:gamelift:local::gamesession/fleet-123/gsess-56961f8e-db9c-4173-97e7-270b82f0daa6