Teste sua integração usando o Amazon GameLift Local - Amazon GameLift

Teste sua integração usando o Amazon GameLift Local

nota

Este tópico aborda testes de jogos que estão integrados somente ao SDK versão 4.x ou anterior do servidor Amazon GameLift. O pacote de SDK do seu servidor inclui uma versão compatível do Amazon GameLift Local. Se você estiver usando o SDK do servidor versão 5.x, consulte Configure testes locais com o Amazon GameLift Anywhere para testes locais com uma frota Anywhere do Amazon GameLift.

Use o Amazon GameLift Local para executar uma versão limitada do serviço gerenciado do Amazon GameLift em um dispositivo local e testar a integração do jogo com ele. Esta ferramenta é útil ao fazer o desenvolvimento iterativo na integração do jogo. Fazer upload de cada nova compilação no Amazon GameLift e configurar uma frota para hospedar o jogo é uma alternativa que poderá levar vários minutos ou mais a cada vez.

Com o Amazon GameLift Local, é possível verificar o seguinte:

  • O servidor de jogos está integrado corretamente ao Server SDK e se comunicando corretamente com o serviço do Amazon GameLift para iniciar novas sessões de jogos, aceitar novos jogadores e relatar integridade e status.

  • O cliente do jogo está integrado corretamente ao SDK da AWS para o Amazon GameLift e é capaz de recuperar informações sobre sessões de jogos existentes, iniciar novas sessões de jogos, adicionar jogadores a jogos e se conectar à sessão do jogo.

O Amazon GameLift Local é uma ferramenta da linha de comando que inicia uma versão autocontida do serviço do Amazon GameLift. O Amazon GameLift Local também fornece um log de eventos em execução de inicialização do processo do servidor, verificações de integridade e chamadas à API, além de respostas. O Amazon GameLift Local reconhece um subconjunto das ações do SDK da AWS para o Amazon GameLift. Você pode fazer chamadas pela AWS CLI ou pelo cliente do jogo. Todas as ações de API são realizadas localmente, assim como acontece no serviço Web do Amazon GameLift.

Cada processo do servidor deve hospedar apenas uma única sessão de jogo. A sessão do jogo é o executável que você usa para se conectar ao Amazon GameLift Local. Quando a sessão do jogo estiver concluída, você deverá chamar GameLiftServerSDK::ProcessEnding e sair do processo. Ao testar localmente com o Amazon GameLift Local, você pode iniciar vários processos de servidor. Cada processo se conectará ao Amazon GameLift Local. Em seguida, você pode criar uma sessão de jogo para cada processo do servidor. Quando sua sessão de jogo terminar, o processo do servidor de jogos deverá sair. Em seguida, você deve iniciar manualmente outro processo do servidor.

O Amazon GameLift local oferece suporte às seguintes APIs:

  • CreateGameSession

  • CreatePlayerSession

  • CreatePlayerSessions

  • DescribeGameSessions

  • DescribePlayerSessions

Configurar o Amazon GameLift Local

O Amazon GameLift Local é fornecido como um arquivo .jar executável que acompanha o Server SDK. Ele pode ser executado no Windows ou no Linux e usado com qualquer linguagem com suporte pelo Amazon GameLift.

Para executar o Local, você também deve ter instalado os itens a seguir.

  • Uma compilação do Server SDK do Amazon GameLift, versão 3.1.5 a 4.x.

  • Java 8

Testar um servidor de jogos

Se quiser testar apenas o servidor de jogos, é possível usar a AWS CLI para simular chamadas do cliente do jogo ao serviço do Amazon GameLift Local. Isso verifica se o servidor de jogos está funcionando conforme esperado com o seguinte:

  • O servidor de jogos é executado corretamente e inicializa o Server SDK do Amazon GameLift.

  • Como parte do processo de inicialização, o servidor de jogos notifica o Amazon GameLift de que o servidor está pronto para hospedar sessões de jogos.

  • O servidor de jogos envia o status da integridade para o Amazon GameLift a cada minuto durante a execução.

  • O servidor de jogos responde a solicitações para iniciar uma nova sessão de jogo.

  1. Inicie o Amazon GameLift Local.

    Abra uma janela de prompt de comando, navegue até o diretório que contém o arquivo GameLiftLocal.jar e o execute. Por padrão, o Local escuta solicitações de clientes de jogos na porta 8080. Para especificar um número de porta diferente, use o parâmetro -p, conforme mostrado no seguinte exemplo:

    java -jar GameLiftLocal.jar -p 9080

    Após a inicialização do Local, você vê logs indicando que dois servidores locais foram iniciados, um escutando o servidor de jogos e um escutando o cliente do jogo ou a AWS CLI. Os logs continuam informando a atividade nos dois servidores locais, inclusive a comunicação com e de componentes do jogo.

  2. Inicie o servidor de jogos.

    Inicie o servidor de jogos integrado ao Amazon GameLift localmente. Você não precisa alterar o endpoint do servidor de jogos.

    Na janela do prompt de comando do Local, as mensagens de log indicam que o servidor de jogos se conectou ao serviço do Amazon GameLift Local. Isso significa que o servidor de jogos inicializou com êxito o Server SDK do Amazon GameLift (com InitSDK()). Ele chamou ProcessReady() com os caminhos de log mostrados e, se for bem-sucedido, estará pronto para hospedar uma sessão de jogo. Embora o servidor de jogos esteja em execução, o Amazon GameLift registra em log o relatório de status da integridade do servidor de jogos. O seguinte exemplo do sistema de mensagens de log mostra um servidor de jogos integrado com êxito:

    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

    Entre as mensagens de erro e aviso em potencial estão as seguintes:

    • Erro: "ProcessReady não encontrou um processo com pID: <ID do processo>! O InitSDK() foi invocado?"

    • Aviso: "ProcessReady não encontrou um processo com pID: <ID do processo>! ProcessReady(...) é invocado mais de uma vez?"

  3. Inicie a AWS CLI.

    Assim que o servidor de jogos chamar ProcessReady() com êxito, você poderá começar a fazer chamadas de cliente. Abra outra janela do prompt de comando e inicie a ferramenta AWS CLI. A AWS CLI, por padrão, usa o endpoint de web service do Amazon GameLift. Você deve substituí-lo pelo endpoint do Local em todas as solicitações usando o parâmetro --endpoint-url, conforme mostrado na solicitação de exemplo a seguir.

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

    Na janela do prompt de comando da AWS CLI, os comandos AWS gamelift resultam em respostas conforme documentado em Referência de comando da AWS CLI.

  4. Crie uma sessão de jogo.

    Com a AWS CLI, envie uma solicitação CreateGameSession(). A solicitação deve seguir a sintaxe esperada. Para Local, o parâmetro FleetId pode ser definido como qualquer string 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

    Na janela do prompt de comando do Local, as mensagens de log indicam que o Amazon GameLift Local enviou para o servidor de jogos uma chamada de retorno onStartGameSession. Se uma sessão de jogo for criada com êxito, o servidor de jogos responderá invocando 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"

    Na janela da AWS CLI, o Amazon GameLift responde com um objeto de sessão do jogo, incluindo um ID de sessão do jogo. O novo status da sessão do jogo é Ativação. O status mudará para Ativo assim que o servidor de jogos invocar ActivateGameSession. Se você quiser ver o status alterado, use a AWS CLI para chamar 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 } }

Testar um servidor e um cliente de jogo

Para verificar a integração completa do jogo, inclusive a conexão de jogadores com jogos, você pode executar o servidor de jogos e o cliente localmente. Isso permite testar chamadas programáticas pelo cliente do jogo para o Amazon GameLift Local. Você pode verificar as seguintes ações:

  • O cliente do jogo está fazendo solicitações do SDK da AWS com êxito para o serviço do Amazon GameLift Local, inclusive para criar sessões de jogos, recuperar informações sobre sessões de jogos existente e criar sessões de jogadores.

  • O servidor de jogos está validando corretamente jogadores quando eles tentam participar de uma sessão do jogo. Para jogadores validados, o servidor de jogos pode recuperar dados do jogador (se implementado).

  • O servidor de jogos informa uma conexão perdida quando um jogador deixa o jogo.

  • O servidor de jogos informa o encerramento de uma sessão do jogo.

  1. Inicie o Amazon GameLift Local.

    Abra uma janela de prompt de comando, navegue até o diretório que contém o arquivo GameLiftLocal.jar e o execute. Por padrão, o Local escuta solicitações de clientes de jogos na porta 8080. Para especificar um número de porta diferente, use o parâmetro -p, conforme mostrado no seguinte exemplo.

    ./gamelift-local -p 9080

    Após a inicialização do Local, você vê logs mostrando que dois servidores locais foram iniciados, um escutando o servidor de jogos e um escutando o cliente do jogo ou a AWS CLI.

  2. Inicie o servidor de jogos.

    Inicie o servidor de jogos integrado ao Amazon GameLift localmente. Consulte Testar um servidor de jogos para obter mais detalhes sobre logs de mensagens.

  3. Configure o cliente do jogo do Local e o inicie.

    Para usar o cliente do jogo com o serviço do Amazon GameLift Local, é necessário fazer as seguintes alterações na configuração do cliente do jogo, conforme descrito em Configure o Amazon GameLift em um serviço de back-end:

    • Altere o objeto ClientConfiguration a fim de apontar para o endpoint do Local, como http://localhost:9080.

    • Defina um valor de ID da frota de destino. Para Local, você não precisa de um ID de frota real; defina a frota de destino como qualquer string válida (^fleet-\S+), como fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d.

    • Defina credenciais da AWS. Para Local, você não precisa de credenciais da AWS reais; você pode definir a chave de acesso e a chave secreta como qualquer string.

    ​Na janela do prompt de comando do Local, assim que você iniciar o cliente do jogo, as mensagens de log deverão indicar que ele inicializou o GameLiftClient e que se comunicou com êxito com o serviço do Amazon GameLift.

  4. Teste as chamadas do cliente de jogo para o serviço do Amazon GameLift.

    Verifique se o cliente do jogo foi bem-sucedido fazendo qualquer uma ou todas as seguintes chamadas à API:

    Na janela do prompt de comando do Local, somente chamadas para CreateGameSession() resultam em mensagens de log. Mensagens de log mostram quando o Amazon GameLift Local solicita que o servidor de jogos inicie uma sessão do jogo ( retorno de chamada onStartGameSession) e recebe um ActivateGameSession bem-sucedido quando o servidor de jogos o invoca. Na janela da AWS CLI, todas as chamadas à API resultam em respostas ou mensagens de erro conforme documentado.

  5. Verifique se o servidor de jogos está validando novas conexões de jogador.

    Depois de criar uma sessão de jogo e uma sessão de jogador, estabeleça uma conexão direta com a sessão do jogo.

    Na janela do prompt de comando do Local, as mensagens de log devem mostrar que o servidor de jogos enviou uma solicitação AcceptPlayerSession() para validar a nova conexão do jogador. Se você usar a AWS CLI para chamar DescribePlayerSessions(), o status da sessão do jogador deverá mudar de Reservado para Ativo.

  6. Verifique se o servidor de jogos está informando o status do jogo e do jogador para o serviço do Amazon GameLift.

    Para que o Amazon GameLift gerencie a demanda do jogador e informe corretamente as métricas, o servidor de jogos deve informar diversos status ao Amazon GameLift. Verifique se o Local está registrando em log eventos relacionados às ações a seguir. Também convém usar a AWS CLI para rastrear alterações feitas no status.

    • O jogador se desconecta de uma sessão de jogo – As mensagens de log do Amazon GameLift Local devem mostrar que o servidor de jogos chama RemovePlayerSession(). Uma chamada à AWS CLI para DescribePlayerSessions() deve refletir uma alteração feita no status de Active para Completed. Também convém chamar DescribeGameSessions() para verificar se a contagem de jogadores atual da sessão do jogo diminui em um.

    • A sessão do jogo termina – As mensagens de log do Amazon GameLift Local devem mostrar que o servidor de jogos chama TerminateGameSession().

      nota

      A orientação anterior era chamar TerminateGameSession() ao encerrar uma sessão de jogo. Esse método foi descontinuado com o Server SDK do Amazon GameLift v4.0.1. Consulte Encerrar uma sessão de jogo.

    • O processo do servidor foi finalizado – As mensagens de log do Amazon GameLift Local devem mostrar que o servidor de jogos chama ProcessEnding(). Uma chamada à AWS CLI para DescribeGameSessions() deve refletir uma alteração feita no status de Active para Terminated (ou Terminating).

Variações com o local

Ao usar o Amazon GameLift Local, lembre-se do seguinte:

  • Diferentemente do web service do Amazon GameLift, o Local não rastreia o status da integridade do servidor e inicia o retorno de chamada onProcessTerminate. O Local simplesmente deixa de registrar em log relatórios de integridade do servidor de jogos.

  • Para chamadas para o AWS SDK, os IDs da frota não são validados e podem ser qualquer valor de string que atenda aos requisitos de parâmetro (^fleet-\S+).

  • Os IDs da sessão do jogo criada com o Local têm uma estrutura diferente. Eles incluem a string local, conforme mostrado aqui:

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