Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Découvrez les conteneurs d'une flotte de conteneurs
Sur une flotte de Amazon GameLift Servers conteneurs, chaque instance peut gérer plusieurs conteneurs. Par exemple, vous pouvez exécuter plusieurs répliques du groupe de conteneurs de votre serveur de jeu. Vous pouvez également exécuter un groupe de conteneurs par instance qui fournit des services partagés à l'échelle de l'instance.
Le serveur de découverte de conteneurs permet aux processus de votre serveur de jeu de découvrir les autres conteneurs exécutés sur la même instance. Les conteneurs peuvent ensuite communiquer entre eux via les définitions de groupes de conteneurs via le réseau local de l'instance.
Le serveur de découverte est un service HTTP léger. Amazon GameLift Serversl'exécute localement sur chaque instance de flotte de conteneurs. Le service fournit les informations réseau suivantes pour chaque conteneur exécuté sur cette instance :
Le nom du conteneur que vous définissez dans la définition du groupe de conteneurs.
L'identifiant unique du conteneur.
Adresse IP locale du conteneur sur l'instance.
Le type de groupe de conteneurs, soit
GAME_SERVER(une réplique du groupe de conteneurs du serveur de jeu) soitPER_INSTANCE(le groupe de conteneurs par instance).
Note
Le serveur de découverte de conteneurs n'est disponible que sur les flottes de conteneurs gérées.
Récupérer les informations du réseau de conteneurs
Vous pouvez récupérer les informations du réseau de conteneurs de deux manières : depuis un processus de serveur de jeu avec le SDK Amazon GameLift Servers du serveur, ou depuis n'importe quel conteneur en appelant le serveur de découverte directement via HTTP.
Récupérez les informations du conteneur à l'aide du SDK du serveur
Si le processus de votre serveur de jeu utilise le SDK Amazon GameLift Servers du serveur, lancez l'ListContainersNetworkInfo()action pour récupérer les informations du réseau de conteneurs. Le SDK du serveur localise le serveur de découverte et effectue la demande pour vous. L'action renvoie les informations réseau pour chaque conteneur exécuté sur la même instance. Sur tout autre type de calcul, l'action renvoie une erreur de type de calcul non pris en charge.
ListContainersNetworkInfo()est disponible dans la version 5.5 ou ultérieure du SDK du serveur pour les langues suivantes :
L'action est également disponible dans les Amazon GameLift Servers plugins pour Unreal Engine et Unity.
Récupérez les informations du conteneur en appelant directement le serveur de découverte
Certains conteneurs n'utilisent pas le SDK du serveur, comme les conteneurs par instance. Ces conteneurs appellent le serveur de découverte directement via HTTP. Amazon GameLift Serversprédéfinit la variable d'GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1environnement dans ces conteneurs. Cette variable contient l'adresse du serveur de découverte, y compris le chemin de la version de l'API, et elle est définie à la fois dans les définitions du serveur de jeu et des groupes de conteneurs par instance.
Pour récupérer les informations du réseau de conteneurs, envoyez une GET requête HTTP à ce point de terminaison. L'exemple suivant utilise curl :
curl "$GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1"
Le serveur de découverte renvoie un tableau JSON contenant une entrée pour chaque conteneur exécuté sur l'instance :
[ { "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" } ]
Limites de taux de demande
Le serveur de découverte limite chaque conteneur de l'instance à 10 requêtes par seconde. Il limite les requêtes qui dépassent cette limite et renvoie une erreur. Pour respecter cette limite, interrogez le serveur de découverte une fois au démarrage. Vous pouvez également l'interroger uniquement lorsque vous devez actualiser votre vue de l'instance. Mettez les résultats en cache dans votre conteneur et réutilisez les valeurs mises en cache plutôt que d'interroger le serveur de découverte de manière récurrente.
Actualisez régulièrement votre cache pour le maintenir à jour. L'adresse IP locale d'un conteneur peut changer si celui-ci tombe en panne ou se ferme (par exemple, à la fin de sa session de jeu).
Exemple : collecte de statistiques à partir des conteneurs de serveurs de jeu
Une utilisation courante du serveur de découverte consiste à envoyer des données télémétriques entre des conteneurs d'une même instance sans quitter le réseau local de l'instance. Prenons l'exemple d'une flotte qui gère plusieurs conteneurs de serveurs de jeu (GAME_SERVER) et un seul conteneur par instance (PER_INSTANCE). Le conteneur par instance exécute un collecteur de métriques partagé par tous les serveurs de jeu de l'instance.
Vous pouvez implémenter la collecte de métriques à l'aide d'un modèle push ou d'un modèle pull :
-
Push (émission de métriques) — Au démarrage, chaque conteneur de serveur de jeu appelle
ListContainersNetworkInfo(). Le conteneur trouve l'entrée correspondant au type de groupe dePER_INSTANCEconteneurs. Il lit ensuite l'adresse IP locale à partir de cette entrée. Le serveur de jeu envoie ses métriques directement au collecteur par instance via le réseau local de l'instance. -
Pull (grattage des métriques) — L'approche inverse fonctionne également. Le conteneur par instance n'utilise pas le SDK du serveur, il appelle donc directement le point de terminaison du serveur de découverte. Il trouve les adresses IP de tous les
GAME_SERVERconteneurs de l'instance. Il extrait ensuite un point de terminaison de métriques que chaque conteneur de serveur de jeu expose sur le réseau local.
Dans les deux cas, la communication reste sur le réseau local de l'instance. Chaque conteneur n'interroge le serveur de découverte qu'occasionnellement plutôt que de manière récurrente.