Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
client/server Spielinteraktionen mit Amazon GameLift Servers
Die Komponenten in Ihrer Amazon GameLift Servers Hosting-Lösung interagieren auf spezifische Weise miteinander, um Spielsitzungen als Reaktion auf die Nachfrage der Spieler durchzuführen. In diesem Thema wird beschrieben, wie Komponenten miteinander kommunizieren, wenn Ihr Spieleserver auf Amazon GameLift Servers verwalteten EC2 Flotten, selbstverwalteten Amazon GameLift Servers Anywhere-Flotten oder einer Hybridlösung gehostet wird.
Zu den Komponenten der Hosting-Lösung gehören ein Spieleserver, der Amazon GameLift Servers Dienst, ein clientseitiger Backend-Dienst und ein Spieleclient. Der Spieleserver verwendet das Amazon GameLift ServersServer-SDK, um mit dem Dienst zu interagieren. Amazon GameLift Servers Der Backend-Dienst verwendet die Amazon GameLift ServersService-API (Teil des AWS SDK), um im Namen des Spielclients mit dem Dienst zu interagieren. Wenn Sie einer Spielsitzung beitreten, stellt der Spielclient über die eindeutige IP-Adresse und Portnummer der Spielsitzung eine direkte Verbindung zu einer Spielsitzung her.
Diagramm der Interaktionen
Das folgende Diagramm zeigt, wie Ihre Spielhosting-Komponenten interagieren, sodass der Amazon GameLift Servers Dienst den Status der Verfügbarkeit von Spieleservern verfolgen und Spielsitzungen als Reaktion auf Spieleranforderungen starten kann.
Verhalten bei Interaktionen
In den folgenden Abschnitten wird die Reihenfolge der Ereignisse in jeder der wichtigsten Interaktionen beschrieben.
Initialisierung eines Gameserver-Prozesses
Beim Start stellt ein Spieleserverprozess die Kommunikation mit dem Amazon GameLift Servers Dienst her und meldet seinen Status als bereit, eine Spielsitzung zu veranstalten.
-
Ein neuer Prozess der ausführbaren Datei des Spieleservers wird auf einer Hosting-Ressource ausgeführt.
-
Der Gameserver-Prozess ruft nacheinander die folgenden Server-SDK-Operationen auf:
-
InitSDK()um das Server-SDK zu initialisieren, den Serverprozess zu authentifizieren und die Kommunikation mit dem Amazon GameLift Servers Dienst herzustellen. -
ProcessReady()um die Bereitschaft zu kommunizieren, eine Spielsitzung zu veranstalten. Dieser Aufruf meldet auch die Verbindungsinformationen des Prozesses, die Spielclients verwenden, um sich mit der Spielsitzung zu verbinden, und andere Informationen.
Der Serverprozess wartet dann auf Eingabeaufforderungen des Amazon GameLift Servers Dienstes.
-
-
Amazon GameLift Serversaktualisiert den Status des Serverprozesses auf
ACTIVEund ist für das Hosten einer neuen Spielsitzung verfügbar. -
Amazon GameLift Serversbeginnt in regelmäßigen Abständen, den
onHealthCheckCallback aufzurufen, um einen Integritätsstatus von den Serverprozessen abzufragen. Diese Aufrufe werden fortgesetzt, solange der Serverprozess im aktiven Status bleibt. Der Serverprozess muss innerhalb einer Minute fehlerfrei oder fehlerfrei antworten. Wenn der Serverprozess nicht ordnungsgemäß reagiert oder nicht reagiert, ändert der Amazon GameLift Servers Dienst irgendwann den aktiven Status des Serverprozesses und sendet keine Anfragen mehr, um die Spielsitzung zu starten.
Eine Spielsitzung erstellen
Der Amazon GameLift Servers Dienst startet eine neue Spielsitzung als Antwort auf eine Anfrage eines Spielers, das Spiel zu spielen.
-
Ein Spieler, der den Spielclient verwendet, bittet darum, an einer Spielsitzung teilzunehmen. Je nachdem, wie dein Spiel den Spielerbeitritt handhabt, sendet der Spielclient eine Anfrage an den Backend-Dienst.
-
Wenn für den Spielerbeitritt eine neue Spielsitzung gestartet werden muss, sendet der Backend-Dienst eine Anfrage für eine neue Spielsitzung an den Amazon GameLift Servers Dienst. Diese Anfrage ruft den API-Vorgang
StartGameSessionPlacement()des Dienstes auf. (Als Alternative könnte der Back-End-Dienst oder aufrufenStartMatchmaking()CreateGameSession().) -
Der Amazon GameLift Servers Dienst reagiert darauf, indem er ein neues
GameSessionPlacementTicket mit StatusPENDINGerstellt. Er sendet Ticketinformationen an den Backend-Service zurück, sodass dieser den Status des Platzierungstickets verfolgen und feststellen kann, wann die Spielsitzung für Spieler bereit ist. Weitere Informationen finden Sie unter Richten Sie die Ereignisbenachrichtigung für die Platzierung von Spielsitzungen ein. -
Der Amazon GameLift Servers Dienst startet den Platzierungsprozess für die Spielsitzung. Er identifiziert, welche Flotten untersucht werden müssen, und durchsucht diese Flotten nach einem aktiven Serverprozess, der keine Spielsitzung hostet. Bei der Suche nach einem verfügbaren Serverprozess geht der Amazon GameLift Servers Dienst wie folgt vor:
-
Erstellt ein
GameSessionObjekt mit den Einstellungen für die Spielsitzung und den Spielerdaten aus der Platzierungsanfrage und setzt den Status aufACTIVATING. -
Fordert den Serverprozess auf, eine Spielsitzung zu starten. Der Dienst ruft den
onStartGameSessionCallback des Serverprozesses auf und übergibt das Objekt.GameSession -
Ändert die Anzahl der Spielsitzungen des Serverprozesses auf.
1
-
-
Der Serverprozess führt seine
onStartGameSessionCallback-Funktion aus. Wenn der Serverprozess bereit ist, Player-Verbindungen anzunehmen, ruft er den Server-SDK-Vorgang aufActivateGameSession()und wartet auf Player-Verbindungen. -
Der Amazon GameLift Servers Dienst aktualisiert das
GameSessionObjekt mit Verbindungsinformationen für den Serverprozess (wie im Call to angegebenProcessReady()) und setzt den Status der Spielsitzung aufACTIVE. Außerdem aktualisiert er denGameSessionPlacementTicketstatus aufFULFILLED. -
Der Backend-Dienst ruft
DescribeGameSessionPlacement()an, um den Ticketstatus zu überprüfen und Informationen zur Spielsitzung abzurufen. Wenn die Spielsitzung aktiv ist, benachrichtigt der Backend-Dienst den Spielclient und leitet die Verbindungsinformationen der Spielsitzung weiter. -
Der Spielclient verwendet die Verbindungsinformationen, um sich direkt mit dem Spielserver-Prozess zu verbinden und an der Spielsitzung teilzunehmen.
Einen Spieler zu einem Spiel hinzufügen
Ein Spiel kann optional Spielersitzungen verwenden, um Spielerverbindungen zu Spielsitzungen nachzuverfolgen. Spielersitzungen können einzeln oder als Teil einer Platzierungsanfrage für Spielsitzungen erstellt werden.
-
Der Backend-Dienst ruft den API-Vorgang des Dienstes
CreatePlayerSession()mit einer Spielsitzungs-ID auf. -
Der Amazon GameLift Servers Dienst überprüft den Status der Spielsitzung (muss vorhanden sein
ACTIVE) und sucht in der Spielsitzung nach einem offenen Spielerplatz. Wenn ein Spielautomat verfügbar ist, geht der Dienst wie folgt vor:-
Erstellt ein neues
PlayerSessionObjekt und setzt den Status aufRESERVED. -
Reagiert auf die Backend-Serviceanfrage mit Informationen zur Spielersitzung.
-
-
Der Backend-Dienst leitet die Sitzungsinformationen des Spielers zusammen mit den Verbindungsinformationen der Spielsitzung an den Spielclient weiter.
-
Der Spielclient verwendet die Verbindungsinformationen und die Sitzungs-ID des Spielers, um eine direkte Verbindung zum Spielserverprozess herzustellen und um die Teilnahme an der Spielsitzung zu bitten.
-
Als Reaktion auf einen Beitrittsversuch des Spielclients ruft der Spieleserver-Prozess den API-Vorgang des Dienstes auf,
AcceptPlayerSession()um die Sitzungs-ID des Spielers zu überprüfen. Der Serverprozess akzeptiert die Verbindung oder weist sie zurück. -
Der Amazon GameLift Servers Dienst führt eine der folgenden Aktionen aus:
-
Wenn die Verbindung akzeptiert wird, Amazon GameLift Servers setzt er den
PlayerSessionStatus aufACTIVEund leitet den ProzessPlayerSessionan den Spieleserver weiter. -
Wenn der Spieleserver-Prozess die Sitzungs-ID des Spielers nicht innerhalb eines bestimmten Zeitraums nach der ursprünglichen
CreatePlayerSession()Anfrage abfragt, ändert der Amazon GameLift Servers Dienst denPlayerSessionStatus inTIMEDOUTund öffnet den Spieler-Slot in der Spielsitzung erneut.AcceptPlayerSession()
-
Einen Spieler entfernen
Bei Spielen, die Spielersitzungen verwenden, benachrichtigt der Spieleserverprozess den Amazon GameLift Servers Dienst, wenn ein Spieler die Verbindung trennt. Der Dienst verwendet diese Informationen, um den Status von Spieler-Slots in einer Spielsitzung zu verfolgen und kann neuen Spielern die Nutzung offener Spielautomaten ermöglichen.
-
Ein Spieler trennt die Verbindung zur Spielsitzung.
-
Der Spieleserver-Prozess erkennt die unterbrochene Verbindung und ruft den Server-SDK-Vorgang
RemovePlayerSession()auf. -
Der Amazon GameLift Servers Dienst ändert den Status der Spielersitzung auf
COMPLETEDund öffnet den Spieler-Slot in der Spielsitzung erneut.
Die Spielsitzung wird beendet
Am Ende einer Spielsitzung oder beim Beenden der Spielsitzung informiert der Serverprozess den Amazon GameLift Servers Dienst über den Status der Spielsitzung.
-
Der Spieleserverprozess beendet die Spielsitzung und leitet das Herunterfahren des Prozesses ein, indem er den Server-SDK-Vorgang aufruft.
ProcessEnding() -
Der Spieleserver-Prozess ruft
Destroy()auf, um das Server-SDK aus dem Speicher zu befreien. Dieser Schritt ist für Telemetriemetriemetriken erforderlich, um zu verhindern, dass normale Prozessabbrüche als Abstürze gemeldet werden. -
Der Amazon GameLift Servers Dienst macht Folgendes:
-
Lädt Spielsitzungsprotokolle auf Amazon Simple Storage Service (Amazon S3) hoch.
-
Ändert den Status der Spielsitzung auf
TERMINATED. -
Ändert den Status des Serverprozesses auf
TERMINATED. -
Je nachdem, wie die Hosting-Lösung konzipiert ist, werden die neu verfügbaren Hosting-Ressourcen für die Ausführung eines neuen Spieleserver-Prozesses zugewiesen.
-