> ## 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.

# PlayFab 遊戲伺服器的基本概念

> 了解 PlayFab 多人遊戲伺服器如何封裝為 Windows 或 Linux 容器、上傳為資產，並與 GSDK 整合以進行裝載。

PlayFab 以容器化應用程式的形式運作遊戲伺服器。本教學課程說明遊戲伺服器如何封裝並與 PlayFab 系統整合。

## 容器化和封裝遊戲伺服器

### Windows

在 Windows 上，您通常會將遊戲伺服器可執行檔和其他檔案封裝為 zip 檔案，並將其上傳為遊戲資產。資產會與容器映像結合，以建立您的遊戲伺服器組建。基礎容器映像提供 Windows 作業系統檔案，以及讓遊戲得以執行的執行環境。PlayFab 提供一組受控容器映像，供 Windows 組建使用。
透過 Game Manager 或 [CreateBuildWithManagedContainer()](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.createbuildwithmanagedcontainer) 等 API 建立 Windows 組建時，您需要指定資產，以及它們應掛接在容器檔案系統內的位置。您也需要指定啟動遊戲的殼層命令 (`StartGameCommand`)，這可能類似如下所示。

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

`StartGameCommand` 必須啟動使用 PlayFab 遊戲伺服器 SDK 的應用程式，以便在準備好為遊戲用戶端提供服務時呼叫 `ReadyForPlayers`。應用程式處理序結束時，容器將被終止並回收。

### Linux

在 Linux 上，您需要封裝遊戲可執行檔和資產，自行建立容器映像。在執行階段使用與容器映像結合的資產是選擇性的。
透過 Game Manager 或 [CreateBuildWithCustomContainer()](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.createbuildwithcustomcontainer) 等 API 建立 Linux 組建時，您可以選擇性地指定資產，以及它們應掛接在容器檔案系統內的位置。指定啟動遊戲的殼層命令 (`StartGameCommand`) 也是選擇性的，因為此命令也可以包含在容器映像中。

<Note>
  如需為 PlayFab 多人遊戲伺服器建立 Linux 容器映像的詳細資訊，請查看[此](/zh-TW/services/playfab/multiplayer/servers/deploying-linux-based-builds)頁面
</Note>

## Windows 的受控容器

PlayFab 目前支援一個受控容器：以 Windows Server Core 為基礎的 PlayFab Multiplayer 容器映像。您可以透過 [Docker Hub](https://hub.docker.com/r/microsoft/playfab-multiplayer/) 下載此容器，讓您的本機環境與 Azure 中的執行階段環境相符。

有些偵錯工具可讓您在開發電腦上於本機逐步執行多人遊戲伺服器狀態機。

如需詳細資訊，請查看[在本機對遊戲伺服器進行偵錯以及與 PlayFab 整合](/zh-TW/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab)。

下圖顯示上傳遊戲伺服器並將此套件與所選容器結合的主要流程。

<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="Thunderhead 容器流程" width="739" height="428" data-path="images/playfab/multiplayer/servers/tutorials/thunderhead-container-flow.png" />

### 受控容器更新

受控容器是 Windows 專案最簡單的整合選項，如果您不熟悉容器，這是很好的起點。

受控容器的一項關鍵功能是 PlayFab 會自動以重大安全性修正更新基礎映像，以確保可靠的遊戲體驗。一般而言，安全性更新每個月進行一次，不應造成服務中斷。若要深入了解，請參閱 [Windows 的作業系統修補程式更新](/zh-TW/services/playfab/multiplayer/servers/os-patch-updates)。

在升級期間，正在自然回收的待命工作階段將以更新的容器映像和相同的遊戲伺服器套件取代。

當 PlayFab 打算更新您正在使用的受控容器映像時，您會收到 PlayStream 事件。

## 整合 PlayFab 遊戲伺服器 SDK

*深入了解：*[將遊戲伺服器與 PlayFab 遊戲伺服器 SDK (GSDK) 整合](/zh-TW/services/playfab/multiplayer/servers/integrating-game-servers-with-gsdk)

PlayFab 遊戲伺服器 SDK (GSDK) 以多種程式設計語言提供，例如 **C++**、**C#** 和 **Java**。GSDK 會將您的遊戲伺服器連線至 VM 上安裝的本機代理程式。此代理程式可協助伺服器與 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="Thunderhead GSDK" width="580" height="138" data-path="images/playfab/multiplayer/servers/tutorials/thunderhead-gsdk.png" />

遊戲伺服器初始化時，會進入*準備狀態*，PlayFab 會等待您的遊戲伺服器呼叫 `ReadyForPlayers()`。

呼叫此方法後，遊戲伺服器會進入*待命狀態*，並等待您的配對服務透過 [RequestMultiplayerServer](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.requestmultiplayerserver) 方法向 PlayFab 發出配置要求。

下圖顯示 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="Thunderhead 遊戲伺服器狀態" width="2792" height="1252" data-path="images/playfab/multiplayer/servers/tutorials/thunderhead-game-server-states.png" />

表面上，呼叫 `ReadyForPlayers()` 是讓遊戲伺服器執行並持續執行的唯一需求。不過，您可能還需要處理數個回呼/事件，以提供最佳的使用者體驗。

## 伺服器指令碼和 PlayFab 設定的環境變數

在某些情況下，您可能希望遊戲伺服器執行 CMD、PowerShell 或 bash 指令碼 (「啟動載入器」)，再由它啟動已編譯的遊戲伺服器可執行檔。此指令碼可以設定容器的內部環境、將命令列引數傳遞給可執行檔，或執行您不想在遊戲伺服器可執行檔本身中執行的任何其他工作。

為了方便起見，PlayFab 會在容器中將某些組建資訊設定為下列環境變數。這些資訊也可以透過 GSDK 存取，但從指令碼使用環境變數可能更容易。

* **PF\_TITLE\_ID** - 工作階段主機的遊戲識別碼
* **PF\_BUILD\_ID** - 工作階段主機的組建識別碼
* **PF\_REGION** - 工作階段主機的 Azure 區域
* **PUBLIC\_IPV4\_ADDRESS** - VM 的公用 IP 位址
* **PF\_VM\_ID** - VM 的唯一識別碼 (例如 'xcloudeau4u4yyxj4xymu:AustraliaEast:1E03\_6f27ad88-9bc3-4ea3-8d16-75480aba4637:tvmps\_0e05c37e0bbdca298a09fb0d597bd666eb7c5fd0ebcf1fed4c52e608a39a7c9c\_d')
* **CERTIFICATE\_FOLDER** - 包含遊戲憑證的資料夾
* **PF\_SERVER\_LOG\_DIRECTORY** - 包含遊戲記錄的資料夾
* **PF\_SERVER\_INSTANCE\_NUMBER** - 伺服器的執行個體編號。VM 上的第一部伺服器為 0，第二部為 1，第三部為 2，依此類推。


## Related topics

- [PlayFab 多人遊戲伺服器術語](/zh-TW/services/playfab/multiplayer/servers/server-terms.md)
- [PlayFab 多人遊戲文件](/zh-TW/services/playfab/multiplayer/index.md)
- [使用 PlayFab 多人遊戲伺服器裝載多人遊戲](/zh-TW/services/playfab/multiplayer/servers/using-playfab-servers-to-host-games.md)
- [PlayFab 多人遊戲伺服器 SDK](/zh-TW/services/playfab/multiplayer/servers/server-sdks/overview.md)
- [撰寫遊戲伺服器組建](/zh-TW/services/playfab/multiplayer/servers/author-a-game-server-build.md)
