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.
Entdecken Sie Container auf einer Containerflotte
In einer Amazon GameLift Servers Containerflotte kann jede Instance mehrere Container ausführen. Sie können beispielsweise mehrere Repliken Ihrer Spieleserver-Containergruppe ausführen. Du kannst auch eine Containergruppe pro Instanz ausführen, die gemeinsame, instanzweite Dienste bereitstellt.
Der Container-Discovery-Server ermöglicht es Ihren Spieleserverprozessen, die anderen Container zu erkennen, die auf derselben Instance ausgeführt werden. Container können dann über Containergruppendefinitionen hinweg über das lokale Netzwerk der Instanz miteinander kommunizieren.
Der Discovery-Server ist ein schlanker HTTP-Dienst. Amazon GameLift Serversführt ihn lokal auf jeder Container-Flotteninstanz aus. Der Dienst stellt die folgenden Netzwerkinformationen für jeden Container bereit, der auf dieser Instance ausgeführt wird:
Der Containername, den Sie in der Containergruppendefinition definieren.
Der eindeutige Bezeichner des Containers.
Die lokale IP-Adresse des Containers auf der Instance.
Der Containergruppentyp, entweder
GAME_SERVER(eine Replik der Spieleserver-Containergruppe) oderPER_INSTANCE(die Containergruppe pro Instanz).
Anmerkung
Der Container Discovery Server ist nur für verwaltete Containerflotten verfügbar.
Rufen Sie Container-Netzwerkinformationen ab
Sie können Container-Netzwerkinformationen auf zwei Arten abrufen: von einem Spieleserverprozess mit dem Amazon GameLift Servers Server-SDK oder von einem beliebigen Container, indem Sie den Discovery-Server direkt über HTTP aufrufen.
Rufen Sie Container-Informationen mithilfe des Server-SDK ab
Wenn dein Spieleserverprozess das Amazon GameLift Servers Server-SDK verwendet, rufe die ListContainersNetworkInfo() Aktion auf, um Container-Netzwerkinformationen abzurufen. Das Server-SDK lokalisiert den Discovery-Server und stellt die Anfrage für dich. Die Aktion gibt die Netzwerkinformationen für jeden Container zurück, der auf derselben Instance ausgeführt wird. Bei jedem anderen Berechnungstyp gibt die Aktion einen Fehler zurück, der nicht unterstützt wird.
ListContainersNetworkInfo()ist in der Server-SDK-Version 5.5 oder höher für die folgenden Sprachen verfügbar:
Die Aktion ist auch in den Amazon GameLift Servers Plugins für Unreal Engine und Unity verfügbar.
Rufen Sie Containerinformationen ab, indem Sie den Discovery-Server direkt aufrufen
Einige Container verwenden das Server-SDK nicht, z. B. Container pro Instanz. Diese Container rufen den Discovery-Server direkt über HTTP auf. Amazon GameLift Serverslegt die GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1 Umgebungsvariable in diesen Containern fest. Diese Variable enthält die Adresse des Discovery-Servers, einschließlich des API-Versionspfads, und sie ist sowohl in den Definitionen für den Spielserver als auch in den Containergruppen pro Instanz festgelegt.
Um Container-Netzwerkinformationen abzurufen, senden Sie eine GET HTTP-Anfrage an diesen Endpunkt. Im folgenden Beispiel wird verwende curl:
curl "$GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1"
Der Discovery-Server gibt ein JSON-Array mit einem Eintrag für jeden Container zurück, der auf der Instance ausgeführt wird:
[ { "containerName": "game-server", "ipAddress": "172.17.0.3", "containerId": "b896159563df43736e5e93ad0547a24fa572648d55b70c70747642afca398b18", "containerGroupType": "GAME_SERVER" }, { "containerName": "per-instance", "ipAddress": "172.17.0.4", "containerId": "3c239ae037aec28bb42212ffa2b9e02524c0c4c361db9bc31dd4c5aecc0b7943", "containerGroupType": "PER_INSTANCE" } ]
Grenzwerte für Anforderungsraten
Der Discovery-Server begrenzt jeden Container auf der Instance auf 10 Anfragen pro Sekunde. Er drosselt Anfragen, die diesen Grenzwert überschreiten, und gibt einen Fehler zurück. Um dieses Limit einzuhalten, fragen Sie den Discovery-Server einmal beim Start ab. Alternativ können Sie ihn nur abfragen, wenn Sie Ihre Ansicht der Instance aktualisieren müssen. Zwischenspeichern Sie die Ergebnisse in Ihrem Container und verwenden Sie die zwischengespeicherten Werte wieder, anstatt den Discovery-Server wiederholt abzufragen.
Aktualisieren Sie Ihren Cache regelmäßig, um ihn auf dem neuesten Stand zu halten. Die lokale IP-Adresse eines Containers kann sich ändern, wenn der Container abstürzt oder beendet wird (z. B. wenn die Spielsitzung endet).
Beispiel: Erfassung von Metriken aus Spielservercontainern
Der Discovery-Server wird häufig zum Senden von Telemetriedaten zwischen Containern auf derselben Instance verwendet, ohne das lokale Netzwerk der Instanz zu verlassen. Stellen Sie sich eine Flotte vor, auf der mehrere Spieleservercontainer (GAME_SERVER) und ein einziger Container pro Instanz (PER_INSTANCE) ausgeführt werden. Auf dem Container pro Instanz wird ein Metrik-Collector ausgeführt, den sich alle Spieleserver auf der Instance teilen.
Du kannst die Erfassung von Metriken entweder mit einem Push- oder einem Pull-Modell implementieren:
-
Push (Ausgabe von Messwerten) — Beim Start ruft jeder Spielservercontainer auf
ListContainersNetworkInfo(). Der Container findet den Eintrag mit demPER_INSTANCEContainergruppentyp. Dann liest er die lokale IP-Adresse aus diesem Eintrag. Der Spieleserver sendet seine Messwerte über das lokale Netzwerk der Instanz direkt an den Instance Collector pro Instanz. -
Pull (Metriken Scraping) — Der umgekehrte Ansatz funktioniert auch. Der Container pro Instanz verwendet das Server-SDK nicht und ruft daher den Discovery-Server-Endpunkt direkt auf. Es findet die IP-Adressen aller
GAME_SERVERContainer auf der Instance. Anschließend wird ein Metrik-Endpunkt durchsucht, den jeder Spielservercontainer über das lokale Netzwerk zur Verfügung stellt.
In beiden Fällen bleibt die Kommunikation im lokalen Netzwerk der Instanz. Jeder Container fragt den Discovery-Server nur gelegentlich und nicht in regelmäßigen Abständen ab.