client/server Spielinteraktionen mit Amazon GameLift Servers - Amazon GameLift Servers

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.

client/server Spielverhalten bei den wichtigsten Interaktionen, wie in diesem Thema beschrieben.

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.

  1. Ein neuer Prozess der ausführbaren Datei des Spieleservers wird auf einer Hosting-Ressource ausgeführt.

  2. Der Gameserver-Prozess ruft nacheinander die folgenden Server-SDK-Operationen auf:

    1. InitSDK()um das Server-SDK zu initialisieren, den Serverprozess zu authentifizieren und die Kommunikation mit dem Amazon GameLift Servers Dienst herzustellen.

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

  3. Amazon GameLift Serversaktualisiert den Status des Serverprozesses auf ACTIVE und ist für das Hosten einer neuen Spielsitzung verfügbar.

  4. Amazon GameLift Serversbeginnt in regelmäßigen Abständen, den onHealthCheck Callback 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.

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

  2. 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 aufrufen StartMatchmaking()CreateGameSession().)

  3. Der Amazon GameLift Servers Dienst reagiert darauf, indem er ein neues GameSessionPlacement Ticket mit Status PENDING erstellt. 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.

  4. 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:

    1. Erstellt ein GameSession Objekt mit den Einstellungen für die Spielsitzung und den Spielerdaten aus der Platzierungsanfrage und setzt den Status aufACTIVATING.

    2. Fordert den Serverprozess auf, eine Spielsitzung zu starten. Der Dienst ruft den onStartGameSession Callback des Serverprozesses auf und übergibt das Objekt. GameSession

    3. Ändert die Anzahl der Spielsitzungen des Serverprozesses auf. 1

  5. Der Serverprozess führt seine onStartGameSession Callback-Funktion aus. Wenn der Serverprozess bereit ist, Player-Verbindungen anzunehmen, ruft er den Server-SDK-Vorgang auf ActivateGameSession() und wartet auf Player-Verbindungen.

  6. Der Amazon GameLift Servers Dienst aktualisiert das GameSession Objekt mit Verbindungsinformationen für den Serverprozess (wie im Call to angegebenProcessReady()) und setzt den Status der Spielsitzung aufACTIVE. Außerdem aktualisiert er den GameSessionPlacement Ticketstatus aufFULFILLED.

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

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

  1. Der Backend-Dienst ruft den API-Vorgang des Dienstes CreatePlayerSession() mit einer Spielsitzungs-ID auf.

  2. Der Amazon GameLift Servers Dienst überprüft den Status der Spielsitzung (muss vorhanden seinACTIVE) und sucht in der Spielsitzung nach einem offenen Spielerplatz. Wenn ein Spielautomat verfügbar ist, geht der Dienst wie folgt vor:

    1. Erstellt ein neues PlayerSession Objekt und setzt den Status aufRESERVED.

    2. Reagiert auf die Backend-Serviceanfrage mit Informationen zur Spielersitzung.

  3. Der Backend-Dienst leitet die Sitzungsinformationen des Spielers zusammen mit den Verbindungsinformationen der Spielsitzung an den Spielclient weiter.

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

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

  6. Der Amazon GameLift Servers Dienst führt eine der folgenden Aktionen aus:

    1. Wenn die Verbindung akzeptiert wird, Amazon GameLift Servers setzt er den PlayerSession Status auf ACTIVE und leitet den Prozess PlayerSession an den Spieleserver weiter.

    2. 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 den PlayerSession Status in TIMEDOUT und ö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.

  1. Ein Spieler trennt die Verbindung zur Spielsitzung.

  2. Der Spieleserver-Prozess erkennt die unterbrochene Verbindung und ruft den Server-SDK-Vorgang RemovePlayerSession() auf.

  3. Der Amazon GameLift Servers Dienst ändert den Status der Spielersitzung auf COMPLETED und ö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.

  1. Der Spieleserverprozess beendet die Spielsitzung und leitet das Herunterfahren des Prozesses ein, indem er den Server-SDK-Vorgang aufruft. ProcessEnding()

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

  3. Der Amazon GameLift Servers Dienst macht Folgendes:

    1. Lädt Spielsitzungsprotokolle auf Amazon Simple Storage Service (Amazon S3) hoch.

    2. Ändert den Status der Spielsitzung aufTERMINATED.

    3. Ändert den Status des Serverprozesses aufTERMINATED.

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