Game Server SDK (GSDK) e o ciclo de vida do processo do servidor de jogo
O ciclo de vida do servidor de jogo no PlayFab Multiplayer Servers (MPS) está fortemente ligado aos métodos do GSDK que seu servidor de jogo chama, bem como ao estado do processo do servidor de jogo.Para obter mais informações sobre como integrar seu servidor de jogo ao GSDK, confira a documentação aqui.
Estados de um servidor de jogo
Estes são os principais estados de um servidor de jogo no MPS:- Initializing: o servidor de jogo passa para este estado quando chama o método Start() do GSDK. Neste estado, o servidor de jogo começa a carregar os ativos necessários. Neste estado, o GSDK começa a enviar pulsações ao MPS.
- StandingBy: o servidor de jogo passa para este estado quando chama o método ReadyForPlayers() do GSDK. Esse método deve ser chamado quando todos os ativos necessários do jogo tiverem sido carregados. Essencialmente, este estado sinaliza ao MPS que o servidor de jogo está pronto para ser alocado, para que os jogadores possam se conectar a ele.
- Active: o servidor de jogo passa para este estado quando é alocado por meio da chamada à API RequestMultiplayerServer. Este estado implica que os jogadores podem se conectar ao servidor de jogo e aproveitar o jogo. O fato de o servidor de jogo estar ativo significa que ele não será desligado durante possíveis reduções de escala do build (ou seja, se o número de standingBy for diminuído).
- Terminating: este é o estado para o qual o servidor de jogo passa quando a API ShutDownMultiplayerServer é chamada. Este estado implica que o servidor de jogo está sendo desligado e não estará disponível para a conexão de jogadores.
- remover o contêiner/processo que executa esse servidor de jogo
- coletar e carregar os logs do jogo para que fiquem prontos para arquivamento (mais informações)
- criar um novo contêiner/processo no lugar dele para substituir o que foi encerrado
Um servidor de jogo nunca pode voltar ao estado StandingBy quando está no estado Active. Depois que o estado do jogo for definido como Active, a única maneira de obter um novo servidor de jogo no estado StandingBy é o processo do seu servidor de jogo ser encerrado.
Tempo de vida máximo do servidor
As máquinas virtuais que hospedam os servidores do MPS têm um tempo de vida máximo de 10 dias, portanto, o tempo de vida de um servidor é limitado por esse tempo de vida. O tempo de vida de um servidor tem a garantia de ser de pelo menos 23 horas; o MPS não alocará servidores em uma VM que tenha menos de 23 horas restantes. O GSDK disparará o evento OnMaintenanceScheduled 23 horas antes de a VM ser encerrada à força, para que todos os servidores em execução na VM possam ser desligados normalmente a tempo. Se um servidor ainda estiver em execução na VM quando ela atingir seu tempo de vida máximo de 10 dias, o servidor será encerrado à força e nenhum log será carregado. Para garantir que o seu servidor não seja encerrado à força, verifique se as sessões dele sempre duram menos de 23 horas ou use o evento OnMaintenanceScheduled do GSDK para desligar o servidor normalmente e migrar os jogadores para outro servidor antes do prazo.Encerrando um processo de servidor de jogo
Quando a sessão de jogo terminar, você deverá encerrar normalmente o processo do servidor de jogo para obter um novo servidor de jogo. Se o processo do servidor de jogo falhar, o MPS criará um novo processo de servidor de jogo para substituir o que falhou. Caso o servidor de jogo esteja travado ou congelado, você sempre pode chamar a API ShutDownMultiplayerServer para encerrar manualmente o processo do servidor de jogo. Essa API só deve ser chamada quando o processo do servidor de jogo não puder ser encerrado por conta própria. Ao chamar essa API, você verá o servidor de jogo passar para os estados “Terminating” e “Terminated”. Além disso, todos os servidores travados no estado terminating ou terminated serão substituídos pelo sistema após um período.Há uma chamada de método no GSDK que, se usada, marcará o servidor de jogo como Unhealthy. No momento, ela é ignorada pelo MPS, mas isso pode mudar no futuro. Se esse recurso for essencial para você, deixe uma observação no repositório do GSDK aqui.
