Integre o Amazon GameLift Servers ao seu servidor de jogos com o SDK do servidor.
Este tópico fornece orientação geral sobre a funcionalidade do SDK do servidor que você precisa adicionar ao código do servidor de jogos/ Essa funcionalidade permite que os processos do servidor de jogos se comuniquem com o serviço do Amazon GameLift Servers. Use essas instruções para servidores de jogos que você planeja implantar em frotas EC2 gerenciadas pelo Amazon GameLift Servers, frotas de contêineres gerenciados ou frotas Anywhere.
Os processos do servidor do jogo se comunicam com o serviço do Amazon GameLift Servers para receber instruções do serviço e relatar a integridade do processo do servidor e o status da sessão do jogo. Para obter informações detalhadas sobre interações entre seus componentes da solução de hospedagem de jogos (servidor de jogos, serviço de backend, cliente de jogos e Amazon GameLift Servers), consulte Interações entre cliente/servidor do jogo com o Amazon GameLift Servers.
Obtenha o SDK do servidor
Para preparar seu jogo para hospedagem, adicione o SDK do servidor para o Amazon GameLift Servers ao seu projeto de servidor de jogos. O Server SDK está disponível em várias linguagens. Para obter mais informações sobre o suporte de ferramentas para servidores de jogos, incluindo o SDK do servidor, consulte Obter ferramentas de desenvolvimento do Amazon GameLift Servers.
Baixe o SDK do servidor para sua linguagem de desenvolvimento em github.com/amazon-gamelift
nota
Se você estiver desenvolvendo usando o Unreal Engine ou o Unity, baixe o plug-in do Amazon GameLift Servers para esses mecanismos de jogo. O SDK do servidor está incorporado e pronto para uso. Consulte esses links para obter informações adicionais:
-
Unreal Engine (Download do plugin
) (Guia de integração) -
Unity (Download do plugin
) (Guia de integração)
Referências da API do Server SDK:
Inicializar o processo do servidor
Adicione código para estabelecer comunicação com o serviço do Amazon GameLift Servers e informar quando o processo do servidor estiver pronto para hospedar uma sessão de jogo. Esse código deve ser executado antes de qualquer código do Amazon GameLift Servers.
-
Inicialize um cliente da Amazon GameLift Servers API chamando
InitSdk(). Se você estiver preparando seu servidor de jogos para ser executado em frotas EC2 gerenciadas pelo Amazon GameLift Servers, use oInitSDK()padrão (C++) (C#) (Unreal) (Go) sem parâmetros. O cliente da API gerencia a conexão com o serviço do Amazon GameLift Servers para você.Se você estiver preparando seu servidor de jogos para uso em uma frota Amazon GameLift Servers Anywhere:
Inicialize o cliente da API Amazon GameLift Servers chamando
InitSdk()com o seguinteServerParameters:-
O URL do Websocket usado para se conectar ao servidor do jogo.
-
O ID do processo usado para hospedar o servidor de jogos.
-
O ID do computador que hospeda os processos do seu servidor de jogos.
-
O ID da frota que contém sua computação do Amazon GameLift Servers Anywhere.
-
O token de autorização gerado pelo
GetComputeAuthTokenda operação do Amazon GameLift Servers.
-
-
Notificar o serviço de que o processo do servidor está pronto para hospedar uma sessão de jogo. Chame
ProcessReady()(C++) (C#) (Unreal) (Go) com os seguintesProcessParameters. Cada processo do servidor de jogo deve chamar oProcessReady()apenas uma vez.-
O número de porta para o processo do servidor. Quando o processo do servidor inicia uma sessão de jogo, ele fornece a porta para o serviço Amazon GameLift Servers, que atualiza as informações da sessão do jogo. Seu jogo pode recuperar essas informações e fornecê-las para que os clientes do jogo as usem para se conectarem ao processo do servidor e participarem da sessão do jogo.
-
Os locais dos arquivos que você deseja que o Amazon GameLift Servers armazene para você. Isso pode incluir registros de sessão de jogo e outros arquivos que o processo do servidor gera durante uma sessão de jogo. Embora o Amazon GameLift Servers salve esses arquivos temporariamente na computação em que o processo do servidor está sendo executado, eles só estão disponíveis até que a instância seja encerrada. Você pode acessar arquivos armazenados através do console do Amazon GameLift Servers
ou chamando a operação GetGameSessionLogUrl() da Amazon GameLift Servers API. Se você estiver preparando seu servidor de jogos para uso em uma frota de contêineres gerenciada pelo Amazon GameLift Servers:
Não há necessidade de especificar parâmetros de log para uma frota de contêineres. Em vez disso, envie a sessão do jogo e outros dados de log para a saída padrão. As frotas de contêineres capturam automaticamente toda a saída padrão do contêiner como um fluxo de logs.
-
As seguintes funções de retorno de chamada permitem ao Amazon GameLift Servers enviar mensagens ou solicitações para um processo do servidor de jogos. Você deve implementar cada uma dessas funções no código de seu servidor de jogo. Para obter mais informações, consulte
ProcessParameters(C++) (C#) (Unreal) (Go) .-
(Opcional)
onHealthCheck– O Amazon GameLift Servers chama essa função regularmente para solicitar um relatório de status de integridade do servidor. -
onStartGameSession– O Amazon GameLift Servers chama essa função em resposta à solicitação do cliente CreateGameSession. -
onProcessTerminate– O Amazon GameLift Servers força o processo do servidor a parar, permitindo que ele seja desligado normalmente. -
(Opcional)
onUpdateGameSession– O Amazon GameLift Servers fornece um objeto de sessão do jogo atualizado para o servidor de jogos ou fornece uma atualização de status em uma solicitação de alocação de partida. O atributo de backfill do FlexMatch requer esse retorno de chamada.
-
Também é possível configurar um servidor de jogos para que ele possa acessar com segurança outros recursos da AWS que você possui ou controla. Para obter mais informações, consulte Conecte seu servidor de jogos hospedado pelo Amazon GameLift Servers a outros recursos da AWS.
-
(Opcional) Reportar a integridade do processo do servidor
Adicione código ao seu servidor de jogo para implementar a função onHealthCheck() de retorno de chamada. O Amazon GameLift Servers invoca esse método de retorno de chamada periodicamente para coletar métricas de integridade. Para implementar essa função de retorno de chamada, faça o seguinte:
-
Avalie o status da integridade do processo do servidor. Por exemplo, convém informar o processo do servidor como não íntegro caso alguma dependência externa falhar.
-
Conclua a avaliação de integridade e responda ao retorno de chamada dentro de 60 segundos. Se o Amazon GameLift Servers não receber uma resposta nesse período, ele considerará automaticamente o processo do servidor como não íntegro.
-
Retornar um valor Booliano: verdadeiro para íntegro, falso para não íntegro.
Caso não implemente um retorno de chamada de verificação de integridade, o Amazon GameLift Servers considerará o processo do servidor íntegro, a menos que o servidor não responda.
O serviço do Amazon GameLift Servers usa a integridade do processo do servidor para encerrar processos não íntegros e liberar recursos. Se um processo do servidor continuar sendo não íntegro ou não responder por três verificações de integridade consecutivas, o serviço poderá encerrar o processo e iniciar um novo. O serviço coleta métricas sobre a integridade do processo do servidor de uma frota.
(Opcional) Obtenha um certificado TLS
e o processo do servidor estiver em execução em uma frota com a geração de certificado TLS ativada, você poderá recuperar o certificado para estabelecer uma conexão segura com um cliente de jogo e criptografar a comunicação entre cliente e servidor. Uma cópia do certificado é armazenada na instância. Para obter a localização do arquivo, chame GetComputeCertificate() (C++) (C#) (Unreal) (Go) .
Iniciar uma sessão de jogo
Adicione código para implementar a função onStartGameSession de retorno. O Amazon GameLift Servers invoca esse retorno de chamada para iniciar uma sessão de jogo no processo do servidor.
A função da onStartGameSession usa um objeto GameSession como parâmetro de entrada. Esse objeto inclui informações importantes sobre a sessão do jogo, como o número máximo de jogadores. Também pode incluir dados do jogo e dados do jogador. A implementação da função deve realizar as seguintes tarefas:
-
Encerrar ações para criar uma sessão de jogo com base nas propriedades
GameSession. No mínimo, o servidor do jogo deve associar o ID da sessão do jogo, que os clientes do jogo referenciam ao se conectar ao processo do servidor. -
Processe os dados do jogo e os dados do jogador conforme necessário. Esses dados estão no objeto de
GameSession. -
Notifique o serviço do Amazon GameLift Servers quando uma nova sessão de jogo estiver pronta para aceitar jogadores. Chame a operação
ActivateGameSession()da API do servidor (C++) (C#) (Unreal) (Go) . Em resposta a uma chamada bem-sucedida, o serviço altera o status da sessão do jogo paraACTIVE.
(Opcional) Validar um jogador
Caso esteja monitorando o status das sessões dos jogadores, adicione um código para validar um novo jogador quando ele se conectar a um servidor de jogo. O Amazon GameLift Servers rastreia jogadores e sessões de jogos disponíveis atuais.
Para validação, um cliente do jogo que tenta ingressar em uma sessão de jogo deve incluir um ID da sessão do jogador. O Amazon GameLift Servers gera esta ID quando seu jogo inicia novas sessões de jogos chamando StartGameSessionPlacement() ou StartMatchmaking(). Nessas solicitações, um espaço em uma sessão de jogo é reservada para a sessão do jogador.
Quando o processo do servidor do jogo recebe uma solicitação de conexão do cliente do jogo, ele chama AcceptPlayerSession() (C++) (C#) (Unreal) (Go) com o ID da sessão do jogador. Em resposta, o Amazon GameLift Servers verifica se o ID da sessão do jogador corresponde a um slot aberto reservado na sessão do jogo. Depois que o Amazon GameLift Servers valida o ID da sessão do jogador, o processo do servidor aceita a conexão. O jogador pode então entrar na sessão do jogo. Se o Amazon GameLift Servers não validar o ID da sessão do jogador, o processo do servidor negará a conexão.
(Opcional) Informar o término de uma sessão de jogador
Caso esteja acompanhando o status das sessões dos jogadores, adicione um código para notificar o Amazon GameLift Servers quando um jogador sair da sessão do jogo. Esse código deve ser executado sempre que o processo do servidor detectar uma queda na conexão. O Amazon GameLift Servers usa essa notificação para rastrear os jogadores atuais e os slots disponíveis na sessão do jogo.
Para lidar com conexões perdidas, no código, adicione uma chamada à operação RemovePlayerSession() de API do servidor (C++) (C#) (Unreal) (Go) com o ID de sessão do jogador correspondente.
Encerrar uma sessão de jogo
Adicione o código à sequência de desligamento do processo do servidor para notificar o Amazon GameLift Servers quando uma sessão de jogo estiver terminando. Para reciclar e atualizar recursos de hospedagem, encerre cada os processo do servidor após a conclusão da sessão do jogo.
No início do código de desligamento do processo do servidor, chame a operação ProcessEnding() da API do servidor (C++) (C#) (Unreal) (Go) g . Essa chamada notifica o Amazon GameLift Servers de que o processo do servidor está sendo encerrado. O Amazon GameLift Servers altera o status do da sessão de jogo e do processo do servidor para TERMINATED. Após chamar ProcessEnding(), é seguro que o processo seja encerrado.
Responder a uma notificação de desligamento do processo do servidor
Adicione o código para encerrar o processo do servidor em resposta a uma notificação do serviço do Amazon GameLift Servers. O serviço envia essa notificação quando o processo do servidor relata consistentemente problemas de integridade ou se a instância em que o processo do servidor está sendo executado está sendo encerrada. O Amazon GameLift Servers pode interromper uma instância como parte de um evento de redução de capacidade ou em resposta à interrupção da Instância Spot. Uma interrupção da Instância Spot fornece um aviso de dois minutos, o que dá ao processo do servidor tempo para desconectar os jogadores, preservar dados de estado do jogo e realizar outras tarefas de limpeza.
Para lidar com uma notificação de desligamento, faça as seguintes alterações no código do servidor do jogo:
-
Implemente a função de retorno de chamada
onProcessTerminate()(C++) (C#) (Unreal) (Go) . Esta função deve chamar o código que desliga o processo do servidor. -
Chame a operação
GetTerminationTime()da API do servidor (C++) (C#) (Unreal) (Go) a partir do código de desligamento do servidor do jogo. Se o Amazon GameLift Servers emitiu uma chamada para interromper o processo do servidor, oGetTerminationTime()retornará o tempo estimado de rescisão. -
No início do código de desligamento do servidor do jogo, chame a operação de API do servidor
ProcessEnding()(C++) (C#) (Unreal) (Go) . Essa chamada notifica o serviço do Amazon GameLift Servers sobre o encerramento do processo do servidor. O serviço então altera o status do processo do servidor paraTERMINATED. Após chamarProcessEnding(), é seguro que o processo seja encerrado.