Grundlagen eines PlayFab-Spielservers
PlayFab betreibt Spieleserver als Containeranwendungen. In diesem Tutorial wird beschrieben, wie Spieleserver gepackt und in PlayFab-Systeme integriert werden.
Containerisieren und Verpacken von Spielservern
Windows
Unter Windows packen Sie in der Regel die ausführbare Datei des Spielservers und andere Dateien als ZIP-Dateien und laden sie als Spielressourcen hoch. Ressourcen werden mit einem Containerimage kombiniert, um Ihren Spielserverbuild zu erstellen. Das Basiscontainerimage stellt die Windows-Betriebssystemdateien und die Ausführungsumgebung bereit, in der das Spiel ausgeführt werden kann. PlayFab stellt eine Reihe verwalteter Containerimages bereit, die für Windows-Builds verwendet werden können.
Wenn ein Windows-Build über Game Manager oder APIs wie CreateBuildWithManagedContainer() erstellt wird, geben Sie die Ressourcen an und geben an, wo sie im Dateisystem des Containers eingebunden werden sollen. Sie geben auch den Shellbefehl an, um das Spiel zu starten (StartGameCommand
). Dies kann in etwa wie unten dargestellt sein.
C:\GameCoreApp\GameServer.exe -mode RETAIL
Die StartGameCommand
muss eine Anwendung starten, die das PlayFab Game Server SDK verwendet, um aufzurufen ReadyForPlayers
, wenn sie bereit sind, Spielclients zu bedienen. Der Container wird beendet und wiederverwendet, wenn der Anwendungsprozess beendet wird.
Linux
Unter Linux erstellen Sie das Containerimage selbst, indem Sie ausführbare Spieldateien und Ressourcen packen. Die Verwendung von Ressourcen, die zur Laufzeit mit dem Containerimage kombiniert werden, ist optional.
Wenn ein Linux-Build über Game Manager oder APIs wie CreateBuildWithCustomContainer() erstellt wird, können Sie optional die Ressourcen und den Ort angeben, an dem sie im Dateisystem des Containers eingebunden werden sollen. Die Angabe des Shellbefehls zum Starten des Spiels (StartGameCommand
) ist ebenfalls optional, da dieser Befehl auch im Containerimage enthalten sein kann.
Notiz
Weitere Informationen zum Erstellen von Linux-Containerimages für PlayFab Multiplayer-Server finden Sie auf dieser Seite.
Verwaltete Container für Windows
PlayFab unterstützt derzeit einen verwalteten Container. das PlayFab Multiplayer-Containerimage, basierend auf Windows Server Core. Sie können diesen Container über Docker Hub herunterladen, damit Ihre lokale Umgebung mit der Laufzeitumgebung in Azure übereinstimmt.
Es gibt Debugtools, mit denen Sie den Multiplayer-Serverzustandscomputer lokal in Ihrer Dev-Box durchlaufen können.
Weitere Informationen finden Sie unter Lokales Debuggen von Spielservern und Integration in PlayFab.
Die folgende Abbildung zeigt die Schlüsselflüsse zum Hochladen eines Spielservers und zum Kombinieren dieses Pakets mit einem ausgewählten Container.
Updates für verwaltete Container
Verwaltete Container sind die einfachste Integrationsoption für Windows-Projekte und ein guter Ausgangspunkt, wenn Sie mit Containern nicht vertraut sind.
Ein wichtiges Feature von verwalteten Containern ist, dass PlayFab das Basisimage automatisch mit kritischen Sicherheitskorrekturen aktualisiert, um eine zuverlässige Wiedergabe sicherzustellen. Im Allgemeinen werden Sicherheitsupdates jeden Monat durchgeführt und sollten nicht zu Dienstunterbrechungen führen. Weitere Informationen finden Sie unter Betriebssystempatchupdates für Windows.
Während eines Upgrades werden standing-by-Sitzungen, die natürlich wiederverwendet werden, durch ein aktualisiertes Containerimage und dasselbe Spielserverpaket ersetzt.
Wenn PlayFab beabsichtigt, ein von Ihnen verwendetes verwaltetes Containerimage zu aktualisieren, erhalten Sie PlayStream-Ereignisse.
Integrieren des PlayFab Game Server SDK
Weitere Informationen finden Sie unter:Integrieren von Spielservern in das PlayFab Game Server SDK (GSDK)
Das PlayFab Game Server SDK (GSDK) wird in mehreren Programmiersprachen wie C++, C# und Java bereitgestellt. Das GSDK verbindet Ihren Spielserver mit einem lokalen Agent, der auf der VM installiert ist. Dieser Agent erleichtert wichtige Serverinteraktionen mit der PlayFab-Steuerungsinfrastruktur.
Wenn Ihr Spielserver initialisiert wird, wird er in den Vorbereitungszustand versetzt, wobei PlayFab darauf wartet, dass Ihr Spielserver aufruft ReadyForPlayers()
.
Sobald dies aufgerufen wird, wird der Spielserver in einen Status versetzt und wartet auf Zuordnungsanforderungen von Ihrem Matchmaking-Dienst in PlayFab über die RequestMultiplayerServer-Methode .
Die folgende Abbildung zeigt die Status eines PlayFab-Multiplayerservers.
Angeblich ist der Aufruf ReadyForPlayers()
die einzige Voraussetzung, damit Ihr Spielserver ausgeführt und weiter ausgeführt werden kann. Es gibt jedoch mehrere Rückrufe/Ereignisse, die Sie möglicherweise verarbeiten möchten, um die beste Benutzererfahrung zu bieten.
Serverskripts und PlayFab-konfigurierte Umgebungsvariablen
In einigen Fällen möchten Sie möglicherweise, dass Spielserver ein CMD-, PowerShell- oder Bash-Skript (ein "Bootstrapper") ausführen, das dann die ausführbare Datei Ihres kompilierten Spieleservers startet. Dieses Skript kann die interne Umgebung des Containers konfigurieren, Befehlszeilenargumente an die ausführbare Datei übergeben oder eine andere Aufgabe, die Sie nicht in der ausführbaren Datei des Spielservers selbst ausführen möchten.
Zur Vereinfachung konfiguriert PlayFab einige Buildinformationen als die folgenden Umgebungsvariablen im Container. Auf diese kann auch über das GSDK zugegriffen werden, aber die Verwendung der Umgebungsvariablen kann über ein Skript einfacher sein.
- PF_TITLE_ID : Titel-ID für den Sitzungshost
- PF_BUILD_ID : Build-ID für den Sitzungshost
- PF_REGION : Azure-Region für den Sitzungshost
- PUBLIC_IPV4_ADDRESS : Öffentliche IP-Adresse für den virtuellen Computer
- PF_VM_ID : Eindeutiger Bezeichner für den virtuellen Computer (z. B. "xcloudeau4u4yyxj4xymu:AustraliaEast:1E03_6f27ad88-9bc3-4ea3-8d16-75480aba4637:tvmps_0e05c37e0bbdca298a09fb0d597bd666eb7c5fd0ebcf1fed4c52e608a39a7c9c_d")
- CERTIFICATE_FOLDER – Ordner mit Spielzertifikaten
- PF_SERVER_LOG_DIRECTORY : Ordner mit Spielprotokollen
- PF_SERVER_INSTANCE_NUMBER : Instanznummer für den Server. Der erste Server auf dem virtuellen Computer ist 0, der zweite ist 1, der dritte ist 2 usw.