> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Noções básicas de um servidor de jogo do PlayFab

> Saiba como os servidores de jogo multijogador do PlayFab são empacotados como contêineres Windows ou Linux, carregados como ativos e integrados ao GSDK para hospedagem.

O PlayFab opera servidores de jogo como aplicativos em contêineres. Este tutorial descreve como os servidores de jogo são empacotados e integrados aos sistemas do PlayFab.

## Colocando servidores de jogo em contêineres e empacotando-os

### Windows

No Windows, normalmente você empacota o executável do servidor de jogo e outros arquivos como arquivos zip e os carrega como ativos do jogo. Os ativos são combinados com uma imagem de contêiner para criar o build do servidor de jogo. A imagem de contêiner base fornece os arquivos do sistema operacional Windows e o ambiente de execução que permite que o jogo seja executado. O PlayFab fornece um conjunto de imagens de contêiner gerenciadas para uso em builds Windows.
Quando um build Windows é criado pelo Game Manager ou por APIs como [CreateBuildWithManagedContainer()](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.createbuildwithmanagedcontainer), você especifica os ativos e onde eles devem ser montados no sistema de arquivos do contêiner. Você também especifica o comando de shell para iniciar o jogo (`StartGameCommand`), que pode ser semelhante ao mostrado abaixo.

```cmd theme={null}
C:\GameCoreApp\GameServer.exe -mode RETAIL
```

O `StartGameCommand` deve iniciar um aplicativo que use o PlayFab Game Server SDK para chamar `ReadyForPlayers` quando estiver pronto para atender clientes de jogo. O contêiner será encerrado e reciclado quando o processo do aplicativo for encerrado.

### Linux

No Linux, você mesmo cria a imagem de contêiner empacotando o executável e os ativos do jogo. O uso de ativos combinados com a imagem de contêiner em runtime é opcional.
Quando um build Linux é criado pelo Game Manager ou por APIs como [CreateBuildWithCustomContainer()](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.createbuildwithcustomcontainer), você pode opcionalmente especificar os ativos e onde eles devem ser montados no sistema de arquivos do contêiner. A especificação do comando de shell para iniciar o jogo (`StartGameCommand`) também é opcional, pois esse comando também pode ser incluído na imagem de contêiner.

<Note>
  Confira [esta](/pt-BR/services/playfab/multiplayer/servers/deploying-linux-based-builds) página para obter mais informações sobre como criar imagens de contêiner Linux para o PlayFab Multiplayer Servers
</Note>

## Contêineres gerenciados para Windows

No momento, o PlayFab oferece suporte a um contêiner gerenciado: a imagem de contêiner do PlayFab Multiplayer, baseada no Windows Server Core. Você pode baixar esse contêiner pelo [Docker Hub](https://hub.docker.com/r/microsoft/playfab-multiplayer/) para que seu ambiente local corresponda ao ambiente de runtime no Azure.

Há ferramentas de depuração que permitem percorrer a máquina de estado do servidor multijogador localmente na sua máquina de desenvolvimento.

Para obter mais informações, confira [Depurando servidores de jogo localmente e integração com o PlayFab](/pt-BR/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab).

A imagem a seguir mostra os principais fluxos para carregar um servidor de jogo e combinar esse pacote com um contêiner selecionado.

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/tutorials/thunderhead-container-flow.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=ad4750d314c63445ba7af4b08e4b6d3c" alt="Fluxo de contêiner do Thunderhead" width="739" height="428" data-path="images/playfab/multiplayer/servers/tutorials/thunderhead-container-flow.png" />

### Atualizações de contêineres gerenciados

Os contêineres gerenciados são a opção de integração mais fácil para projetos Windows e um bom ponto de partida se você não estiver familiarizado com contêineres.

Um recurso importante dos contêineres gerenciados é que o PlayFab atualizará automaticamente a imagem base com correções de segurança críticas para garantir uma jogabilidade confiável. Em geral, as atualizações de segurança acontecem todo mês e não devem causar interrupção do serviço. Para saber mais, consulte [Atualizações de patches do sistema operacional para Windows](/pt-BR/services/playfab/multiplayer/servers/os-patch-updates).

Durante uma atualização, as sessões em espera que estão sendo recicladas naturalmente serão substituídas por uma imagem de contêiner atualizada e pelo mesmo pacote de servidor de jogo.

Quando o PlayFab pretender atualizar uma imagem de contêiner gerenciada que você está usando, você receberá eventos do PlayStream.

## Integrando o PlayFab Game Server SDK

*Saiba mais em:* [Integrando servidores de jogo com o PlayFab Game Server SDK (GSDK)](/pt-BR/services/playfab/multiplayer/servers/integrating-game-servers-with-gsdk)

O PlayFab Game Server SDK (GSDK) é fornecido em várias linguagens de programação, como **C++**, **C#** e **Java**. O GSDK conecta seu servidor de jogo a um agente local instalado na VM. Esse agente facilita as principais interações do servidor com a infraestrutura de controle do PlayFab.

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/tutorials/thunderhead-gsdk.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=1a53d24933a02325bba1ec5b35cc7d22" alt="GSDK do Thunderhead" width="580" height="138" data-path="images/playfab/multiplayer/servers/tutorials/thunderhead-gsdk.png" />

Quando o servidor de jogo é inicializado, ele é colocado em um *estado de preparação*, com o PlayFab aguardando que o servidor de jogo chame `ReadyForPlayers()`.

Depois que esse método é chamado, o servidor de jogo é colocado em um *estado de espera* e aguarda solicitações de alocação do seu serviço de matchmaking para o PlayFab por meio do método [RequestMultiplayerServer](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.requestmultiplayerserver).

A imagem exibida abaixo mostra os estados de um servidor multijogador do PlayFab.

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/tutorials/thunderhead-game-server-states.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=5660725368a9559f65480d95e5a6faeb" alt="Estados do servidor de jogo do Thunderhead" width="2792" height="1252" data-path="images/playfab/multiplayer/servers/tutorials/thunderhead-game-server-states.png" />

Aparentemente, chamar `ReadyForPlayers()` é o único requisito para fazer seu servidor de jogo ser executado e continuar em execução. No entanto, há vários retornos de chamada/eventos que você pode querer processar para oferecer a melhor experiência ao usuário.

## Scripts de servidor e variáveis de ambiente configuradas pelo PlayFab

Em alguns casos, talvez você queira que os servidores de jogo executem um script CMD, PowerShell ou bash (um "bootstrapper"), que então inicia o executável compilado do servidor de jogo. Esse script pode configurar o ambiente interno do contêiner, passar argumentos de linha de comando ao executável ou realizar qualquer outra tarefa que você não queira executar no próprio executável do servidor de jogo.

Por conveniência, o PlayFab configura algumas informações do build como as seguintes variáveis de ambiente no contêiner. Elas também podem ser acessadas pelo GSDK, mas usar as variáveis de ambiente pode ser mais fácil a partir de um script.

* **PF\_TITLE\_ID**: ID do título do host da sessão
* **PF\_BUILD\_ID**: ID do build do host da sessão
* **PF\_REGION**: região do Azure do host da sessão
* **PUBLIC\_IPV4\_ADDRESS**: endereço IP público da VM
* **PF\_VM\_ID**: identificador exclusivo da VM (como 'xcloudeau4u4yyxj4xymu:AustraliaEast:1E03\_6f27ad88-9bc3-4ea3-8d16-75480aba4637:tvmps\_0e05c37e0bbdca298a09fb0d597bd666eb7c5fd0ebcf1fed4c52e608a39a7c9c\_d')
* **CERTIFICATE\_FOLDER**: pasta que contém os certificados do jogo
* **PF\_SERVER\_LOG\_DIRECTORY**: pasta que contém os logs do jogo
* **PF\_SERVER\_INSTANCE\_NUMBER**: número da instância do servidor. O primeiro servidor na VM é 0, o segundo é 1, o terceiro é 2 e assim por diante.


## Related topics

- [Documentação do PlayFab Multiplayer](/pt-BR/services/playfab/multiplayer/index.md)
- [Termos do PlayFab Multiplayer Server](/pt-BR/services/playfab/multiplayer/servers/server-terms.md)
- [Integrando o PlayFab GSDK ao Unity](/pt-BR/services/playfab/multiplayer/servers/mps-unity.md)
- [Depurando servidores de jogo localmente e integração com o PlayFab](/pt-BR/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab.md)
- [Início rápido do SDK do Lobby](/pt-BR/services/playfab/multiplayer/lobby/lobby-getting-started.md)
