Integration eines Spielclients für Amazon GameLift ServersRealtime - 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.

Integration eines Spielclients für Amazon GameLift ServersRealtime

In diesem Thema wird beschrieben, wie Sie Ihren Spiele-Client vorbereiten können, um an von Amazon GameLift Servers gehosteten Spielesitzungen teilzunehmen.

Es gibt zwei Gruppen von Aufgaben, die zur Vorbereitung Ihres Spiele-Clients erforderlich sind:

  • Einrichten Ihres Spiele-Clients zum Erfassen von Informationen zu bestehenden Spielen, zur Anforderung von Zuordnungen, zum Starten neuer Spielesitzungen und zur Reservierung von Spielesitzungsplätzen für einen Spieler.

  • Ermöglichen Sie Ihrem Spiel-Client den Beitritt zu einer auf einem Realtime-Server gehosteten Spielesitzung und zum Austausch von Nachrichten.

Finde oder erstelle Spielsitzungen und Spielersitzungen

Richten Sie Ihren Spiel-Client so ein, dass er Spielesitzungen suchen oder starten, FlexMatch-Zuordnungen anfragen und Platz für Spieler in einem Spiel durch die Erstellung von Spielersitzungen reservieren kann. Es hat sich bewährt, einen Back-End-Dienst zu erstellen und ihn zu verwenden, um direkte Anfragen an den Amazon GameLift Servers Dienst zu stellen, wenn dies durch eine Spielclient-Aktion ausgelöst wird. Der Backend-Service leitet dann die entsprechenden Antworten zurück an den Spielclient.

  1. Füge das AWS SDK zu deinem Spielclient hinzu, initialisiere einen Amazon GameLift Servers Client und konfiguriere ihn so, dass er die Hosting-Ressourcen in deinen Flotten und Warteschlangen nutzt. Das AWS SDK ist in mehreren Sprachen verfügbar. Weitere Informationen finden Sie unter. Amazon GameLift Servers SDKs Für Spieleclient-Dienste

  2. Fügen Sie Ihrem Back-End-Dienst Amazon GameLift Servers Funktionen hinzu. Eine detailliertere Anleitung finden Sie unter Zu Amazon GameLift Servers deinem Spielclient hinzufügen und FlexMatchMatchmaking hinzufügen. Die beste Vorgehensweise ist es, die Platzierung von Spielsitzungen zu nutzen, um neue Spielsitzungen zu erstellen. Mit dieser Methode können Sie die Amazon GameLift Servers Möglichkeit, schnell und intelligent neue Spielsitzungen zu veranstalten, voll ausschöpfen und Daten zur Spielerlatenz verwenden, um Spielverzögerungen zu minimieren. Ihr Back-End-Dienst muss mindestens in der Lage sein, neue Spielsitzungen anzufordern und als Reaktion darauf Spielesitzungsdaten zu verarbeiten. Sie können außerdem Funktionen zur Suche nach und zum Erhalten von Informationen über bestehende Spielsitzungen hinzufügen und Spielersitzungen anfordern, die effektiv einen Spielerplatz in einer bestehenden Spielsitzung reservieren.

  3. Übermitteln Sie Verbindungsinformationen zurück an den Spiel-Client. Der Backend-Dienst empfängt als Antwort auf Anfragen an den Dienst Objekte für Spielsitzungen und Spielersitzungen. Amazon GameLift Servers Diese Objekte enthalten Informationen, insbesondere Verbindungsdetails (IP-Adresse und Port) und Spielersitzungs-ID, die der Spiel-Client benötigt, um sich mit der Spielsitzung auf einem Echtzeit-Server zu verbinden.

Connect dich mit Spielen auf Amazon GameLift ServersRealtime

Ermöglichen Sie Ihrem Spiel-Client, eine direkte Verbindung mit einer gehosteten Spielsitzung auf einem Realtime-Server herzustellen und Nachrichten mit dem Server und mit anderen Spielern auszutauschen.

  1. Besorgen Sie sich das Client-SDK für Amazon GameLift ServersRealtime, erstellen Sie es und fügen Sie es Ihrem Spieleclient-Projekt hinzu. In der README-Datei finden Sie weitere Informationen zu den SDK-Anforderungen und Anweisungen zum Erstellen der Client-Bibliotheken.

  2. Rufen Sie Kunde () mit einer Client-Konfiguration auf, die den zu verwendenden client/server Verbindungstyp angibt.

    Anmerkung

    Wenn Sie eine Verbindung zu einem Echtzeitserver herstellen, der auf einer gesicherten Flotte mit einem TLS-Zertifikat ausgeführt wird, müssen Sie einen gesicherten Verbindungstyp angeben.

  3. Fügen Sie die folgenden Funktionen Ihrem Spiel-Client hinzu. Weitere Informationen finden Sie unter Amazon GameLift ServersRealtimeClient-API-Referenz (C#).

  4. Richten Sie nach Bedarf Ereignishandler für die Client-Callbacks ein. Siehe Amazon GameLift ServersRealtimeClient-API-Referenz (C#): Asynchrone Rückrufe.

Bei der Arbeit mit Echtzeit-Flotten mit aktivierter TLS-Zertifikatgenerierung wird der Server automatisch mit dem TLS-Zertifikat authentifiziert. TCP- und UDP-Datenverkehr wird während der Übertragung verschlüsselt, um Sicherheit auf Transportebene zu gewährleisten. TCP-Datenverkehr wird mit TLS 1.2 verschlüsselt und UDP-Datenverkehr wird mit DTLS 1.2 verschlüsselt.

Beispiele für Spieleclients

Einfacher Echtzeitclient (C#)

Dieses Beispiel zeigt eine grundlegende Spieleclient-Integration mit dem Client-SDK (C#) für. Amazon GameLift Servers Realtime Wie gezeigt, initialisiert das Beispiel ein Realtime-Client-Objekt, richtet Ereignishandler ein und implementiert die clientseitigen Callbacks, stellt eine Verbindung zu einem Realtime-Server her, sendet eine Nachricht und trennt die Verbindung.

using System; using System.Text; using Aws.GameLift.Realtime; using Aws.GameLift.Realtime.Event; using Aws.GameLift.Realtime.Types; namespace Example { /** * An example client that wraps the client SDK for Amazon GameLift Servers Realtime * * You can redirect logging from the SDK by setting up the LogHandler as such: * ClientLogger.LogHandler = (x) => Console.WriteLine(x); * */ class RealTimeClient { public Aws.GameLift.Realtime.Client Client { get; private set; } // An opcode defined by client and your server script that represents a custom message type private const int MY_TEST_OP_CODE = 10; /// Initialize a client for Amazon GameLift Servers Realtime and connect to a player session. /// <param name="endpoint">The DNS name that is assigned to Realtime server</param> /// <param name="remoteTcpPort">A TCP port for the Realtime server</param> /// <param name="listeningUdpPort">A local port for listening to UDP traffic</param> /// <param name="connectionType">Type of connection to establish between client and the Realtime server</param> /// <param name="playerSessionId">The player session ID that is assigned to the game client for a game session </param> /// <param name="connectionPayload">Developer-defined data to be used during client connection, such as for player authentication</param> public RealTimeClient(string endpoint, int remoteTcpPort, int listeningUdpPort, ConnectionType connectionType, string playerSessionId, byte[] connectionPayload) { // Create a client configuration to specify a secure or unsecure connection type // Best practice is to set up a secure connection using the connection type RT_OVER_WSS_DTLS_TLS12. ClientConfiguration clientConfiguration = new ClientConfiguration() { // C# notation to set the field ConnectionType in the new instance of ClientConfiguration ConnectionType = connectionType }; // Create a Realtime client with the client configuration Client = new Client(clientConfiguration); // Initialize event handlers for the Realtime client Client.ConnectionOpen += OnOpenEvent; Client.ConnectionClose += OnCloseEvent; Client.GroupMembershipUpdated += OnGroupMembershipUpdate; Client.DataReceived += OnDataReceived; // Create a connection token to authenticate the client with the Realtime server // Player session IDs can be retrieved using AWS SDK for Amazon GameLift Servers ConnectionToken connectionToken = new ConnectionToken(playerSessionId, connectionPayload); // Initiate a connection with the Realtime server with the given connection information Client.Connect(endpoint, remoteTcpPort, listeningUdpPort, connectionToken); } public void Disconnect() { if (Client.Connected) { Client.Disconnect(); } } public bool IsConnected() { return Client.Connected; } /// <summary> /// Example of sending to a custom message to the server. /// /// Server could be replaced by known peer Id etc. /// </summary> /// <param name="intent">Choice of delivery intent i.e. Reliable, Fast etc. </param> /// <param name="payload">Custom payload to send with message</param> public void SendMessage(DeliveryIntent intent, string payload) { Client.SendMessage(Client.NewMessage(MY_TEST_OP_CODE) .WithDeliveryIntent(intent) .WithTargetPlayer(Constants.PLAYER_ID_SERVER) .WithPayload(StringToBytes(payload))); } /** * Handle connection open events */ public void OnOpenEvent(object sender, EventArgs e) { } /** * Handle connection close events */ public void OnCloseEvent(object sender, EventArgs e) { } /** * Handle Group membership update events */ public void OnGroupMembershipUpdate(object sender, GroupMembershipEventArgs e) { } /** * Handle data received from the Realtime server */ public virtual void OnDataReceived(object sender, DataReceivedEventArgs e) { switch (e.OpCode) { // handle message based on OpCode default: break; } } /** * Helper method to simplify task of sending/receiving payloads. */ public static byte[] StringToBytes(string str) { return Encoding.UTF8.GetBytes(str); } /** * Helper method to simplify task of sending/receiving payloads. */ public static string BytesToString(byte[] bytes) { return Encoding.UTF8.GetString(bytes); } } }