For the complete documentation index, see llms.txt. This page is also available as Markdown.

Appariement

Démarrez rapidement avec le matchmaking et explorez des scénarios d’exemple pour différents genres.

Le matchmaking dans les jeux basés sur des matchs vise généralement à :

  • trouver d'autres joueurs en fonction de critères tels que la région, la latence, le niveau, ou les paramètres du jeu ;

  • rechercher des serveurs pour rejoindre en fonction de la capacité disponible [ou du ping, de la région, du niveau, de la carte, du mode] ;

  • démarrer un nouveau serveur si les serveurs existants sont pleins ou ne répondent pas aux critères des joueurs.

L'expérience du joueur passe avant tout, définissant nos objectifs principaux :

  • taux de remplissage des matchs élevé et intégration des fonctionnalités sociales (jouer avec des amis en groupe),

  • matchs rapides avec qualité de match contrôlée (faible latence, préférences partagées),

  • processus de matchmaking fiable et prévisible avec une disponibilité mondiale.

Suivez cette vidéo pour démarrer avec notre service Matchmaker :

✔️ Préparation

Tester ce service est entièrement gratuit, aucune carte de crédit requise.

Le niveau gratuit permet jusqu'à 3 heures d'exécution sur notre cluster de test partagé, après chaque redémarrage.

Ce tutoriel suppose que vous avez déjà :

Architecture du matchmaking

Ce guide se concentrera sur l’API Matchmaking et l’API Backfill.

Il existe quatre (4) flux de données importants lorsque le matchmaking est impliqué :

  1. API Matchmaking est utilisée par les clients de jeu pour communiquer avec Matchmaker :

    1. pour la gestion des groupes, l’affectation des serveurs et le suivi,

    2. pour la mesure du ping avec Balises de ping.

  2. Déploiements L’API est utilisée pour déployer, faire évoluer et gérer vos serveurs dédiés par Matchmaker.

  3. Transports Netcode sont utilisés pour communiquer entre les clients de jeu et les serveurs dédiés.

  4. Regard approfondi pour remplacer ou ajouter des joueurs à un serveur en cours d’exécution.

Après la mise en production, votre matchmaker devra fonctionner 24 h/24 et 7 j/7 pour garantir que les joueurs du monde entier puissent rejoindre les serveurs.

🍀 Exemple simple

Commencez par un exemple simple et testez le flux de base des joueurs dans le matchmaking :

1. Configuration sur le palier gratuit

☑️ Inscrivez-vous pour obtenir votre compte Edgegap gratuit et ouvrez la page du tableau de bord Matchmaker.

☑️ Cliquez sur Créer un Matchmaker d’abord, puis saisissez :

  • nom du matchmaker - pour votre propre référence, par ex. quickstart-dev ,

  • téléchargez notre configuration JSON Simple Example.

🍀 Exemple simple (configuration minimale recommandée) :

Dépannage et FAQ :

La configuration de l'application n'est pas valide pour le profil XYZ.
L'image Docker pour '2024.01.30-16.23.00-UTC' n'est pas mise en cache.

🌟 Passez au niveau Pay as You Go pour débloquer déploiements instantanés avec mise en cache.

  • Les images non mises en cache de plus de 4 Go peuvent prendre plus de temps à se déployer, entraînant Déploiements. Envisagez d'optimiser la taille de votre image serveur (Unreal Engine / Unity).

  • Vous pouvez procéder malgré tout, bien que nous recommandions de tester le temps de déploiement.

☑️ Si aucune erreur de validation n’apparaît, cliquez sur Créer et démarrer et attendez la fin du processus. Cela lancera un nouveau cluster gratuit avec votre matchmaker Simple Example.

✅ Vous pouvez maintenant passer à l’étape suivante.

2. Explorer la configuration

À mesure que nous publions des mises à jour de Matchmaker, chaque nouvelle version utilise le versionnement sémantique pour communiquer clairement l’impact des changements en interprétant le format major.minor.patch:

  • 🔥 majeur les versions incluent des changements non rétrocompatibles et nécessitent une revue d’intégration,

  • 🌟 mineur les versions incluent des améliorations importantes compatibles avec les versions antérieures,

  • 🩹 correctif les versions incluent des corrections de bugs et des améliorations mineures.

Inspecter les tickets pour mieux comprendre et déboguer les flux de matchmaking possibles pendant le développement. Nous recommandons de désactiver l’API d’inspection pour votre matchmaker de production.

Certaines mises en production peuvent entraîner des erreurs. Nous essayons de résoudre ce problème en réessayant le déploiement jusqu’à max_deployment_retry_count fois automatiquement (sans confirmation du client).

Pour garantir que les plantages inattendus du client ou les tickets abandonnés ne restent pas en suspens et n’occupent pas les ressources de votre matchmaker, les tickets non jumelés seront annulés après ticket_expiration_period ce qui fera passer leur statut à ANNULÉ puis supprimés définitivement après ticket_removal_period .

Le cœur de notre logique de matchmaking est configuré dans Profils (files d’attente). Chaque profil est une file d’attente de matchmaking totalement isolée, pointant vers Applications et versions avec une quantité prédéfinie de ressources CPU et mémoire (RAM) requises.

Règles dans l’ensemble de règles initial doit être respecté pour que les joueurs soient regroupés, chacune définie par trois propriétés :

  • nom de votre choix, par ex. - taille du groupe,

  • type de règle, également appelé opérateur, par ex. - player_count,

  • et enfin les attributs de l’opérateur, par ex. team_count ou max_team_size.

Règle de nombre de joueurs

Il s’agit d’une règle spéciale définissant combien de joueurs doivent correspondre pour lancer l’affectation :

  • team_count fait référence au nombre d’équipes, 1 équipe peut être utilisée pour les modes coopératifs ou tous contre tous,

  • min_team_size fait référence au nombre minimum de joueurs par équipe.

  • max_team_size fait référence au nombre maximum de joueurs par équipe.

Notre exemple simple montre un jeu coopératif avec 2 joueurs.

Règle de latence

latences est une règle spéciale optimisant le ping des matchs de joueurs :

  • réduire la latence client-serveur en supprimant les régions à forte latence (au-dessus du seuil),

  • améliorer l’équité des matchs en regroupant les joueurs ayant une latence similaire (en dessous de la différence).

Exemple de règle : balises

balises règle configurée avec "difference": 100, "max_latency": 200 correspondra à :

Alice et Bob peuvent correspondre :

  • Tokyo est écarté (>200 ms),

  • la latence pour Chicago se situe dans une différence absolue de 100 ms.

Ville de la balise
Correspondance
abs(A - B) [ms]
Alice [ms]
Bob [ms]

Chicago

75.0

12.3

87.3

Los Angeles

113.2

145.6

32.4

Tokyo

n/a

n/a

233.2

253.2

Alice et Charlie ne correspondront jamais :

  • aucune balise n'a une latence < 200 ms pour les deux joueurs,

  • Alice vit en Amérique du Nord - Illinois,

  • Charlie vit en Asie - Japon.

Ville de la balise
Correspondance
abs(A - B) [ms]
Alice [ms]
Charlie [ms]

Chicago

n/a

n/a

12.3

215.6

Los Angeles

n/a

n/a

145.6

238.3

Tokyo

n/a

n/a

233.2

24.2

✅ Vous pouvez maintenant passer à l’étape suivante.

3. Examiner les détails de l’instance

☑️ Vérifiez les détails de votre nouveau matchmaker dans notre tableau de bord une fois qu’il est initialisé :

  • Statut indique l’état du service, peut être ONLINE, OFFLINE ou ERROR.

  • Identifiant aide le personnel Edgegap à trouver rapidement votre matchmaker si vous avez besoin d’aide pour le dépannage.

  • Démarré le peut être utile pour retrouver la dernière heure de mise à jour.

  • Taille correspond à l’un de nos paliers tarifaires.

  • URL de l’API sera utilisée par les clients de jeu et les serveurs de jeu pour communiquer avec votre matchmaker.

  • URL Swagger est une interface GUI de spécification OpenAPI pratique que nous fournissons pour explorer le schéma de l’API.

  • Jeton d’authentification est un jeton secret unique utilisé par les clients de jeu et le serveur de jeu pour l’authentification.

Pour tester votre nouveau matchmaker, vous aurez besoin de l’URL Swagger, de l’URL de l’API et du jeton d’authentification.

✅ Vous pouvez maintenant passer à l’étape suivante.

Pour mettre à jour les règles de votre matchmaker en développement, modifiez votre configuration et redémarrez-le.

4. Tester l’API des tickets

Veuillez attendre jusqu’à 5 minutes après le démarrage de votre matchmaker pour permettre la propagation DNS de se terminer.

☑️ D’abord, ouvrez votre URL Swagger pour inspecter votre schéma OpenAPI dans l’interface Swagger :

☑️ Cliquez sur Autoriser 🔒, collez votre Jeton d’authentificationet confirmez en cliquant sur Autoriser.

☑️ Faites défiler jusqu’à API des tickets - POST /tickets, développez et cliquez sur Essayer.

☑️ Prévisualisez votre requête :

  • remarque player_ip défini sur null - cela fera en sorte que Matchmaker utilise automatiquement l’adresse IP ajoutée à votre requête (voir Serveur à serveur pour des alternatives),

  • profile fait référence à votre Profils (files d’attente),

  • attributes inclure des valeurs pour les règles de votre matchmaker, dans ce cas pour la les latences règle,

    • règle player_count est la seule règle qui ne nécessite aucun attribut dans les tickets des joueurs.

☑️ Cliquez sur Exécuter et examinez la réponse à votre requête de ticket joueur :

☑️ Créez un deuxième ticket en appuyant sur Exécuter à nouveau, afin que nos deux joueurs soient jumelés et qu’un serveur soit démarré.

☑️ Réduisez POST /tickets et ouvrez GET /tickets/{ticketId}, puis cliquez sur Essayer.

☑️ Saisissez l’identifiant du ticket depuis la réponse à l’étape précédente et cliquez sur Exécuter.

☑️ Consultez l’affectation mise à jour pour votre ticket joueur :

  • statut changé en MATCH_FOUND d’abord, tout en conservant affectation défini sur null pour indiquer que les joueurs ont été jumelés et qu’un serveur est en cours d’affectation,

☑️ Cliquez sur Exécuter à nouveau pour vérifier votre ticket, et examinez l’affectation mise à jour de votre ticket :

  • statut changé en HOST_ASSIGNED avec affectation contenant les détails du serveur affecté.

Dépannage et FAQ

Mon ticket est bloqué en SEARCHING .

  • Veuillez vérifier que vous avez créé suffisamment de tickets avec des critères qui se chevauchent et qui respectent votre configuration.


Mon ticket est bloqué en alternance entre MATCH_FOUND et TEAM_FOUND de manière répétée.

  • Les comptes du palier gratuit sont limités à 1 déploiement à la fois. Veuillez envisager une mise à niveau ou arrêter votre déploiement actuel pour en lancer un nouveau.


Mon ticket passe directement à ANNULÉ.

  • Votre ticket a atteint sa date d’expiration. Recréez un nouveau ticket ou augmentez la période d’expiration dans votre configuration à des fins de test.


Je reçois une erreur HTTP 404 Not Found lorsque je vérifie mon ticket.

  • Votre ticket a été supprimé soit par une requête DELETE, soit en atteignant sa période de suppression (qui commence après l’expiration du ticket, définie dans votre configuration). Recréez un nouveau ticket ou augmentez les périodes d’expiration/suppression dans votre configuration à des fins de test.

☑️ Inspectez votre nouveau déploiement dans notre tableau de bord:

  • notez que chaque déploiement est étiqueté avec tous les identifiants de ticket et le profil pour une meilleure traçabilité.

Quelques secondes après avoir trouvé une correspondance, les adhésions passent à status:HOST_ASSIGNED indiquant que votre le déploiement est maintenant prêt et votre serveur de jeu est en cours d'initialisation.

Chaque joueur lit son ticket_id et attribution et tente une connexion en utilisant le FQDN (URL du déploiement) et le port externe. Votre serveur de jeu est peut-être encore en cours d'initialisation à ce moment-là, donc les joueurs doivent réessayer la connexion plusieurs fois, jusqu’à dépasser votre temps d'initialisation habituel du serveur :

Pour se connecter depuis PIE (éditeur) pendant le développement et les tests, appuyez sur la touche tilde ~ et tapez open {URL}:{port} et attendez que votre éditeur charge la carte.

Pour se connecter depuis une compilation du client de jeu (et dans un environnement de production réel) essayez

Pour connecter votre éditeur Unity ou client de jeu à votre déploiement cloud, saisissez :

  • Déploiement URL pointant vers l'adresse IP du serveur, généralement dans NetworkManager composant.

  • Port externe correspondant au port d'écoute interne du serveur, généralement dans un composant Transport.

Nous ne demandons pas aux joueurs de confirmer la partie, car nous visons à fournir le temps d'accès au gameplay le plus court possible, un taux de remplissage des parties élevé, et à minimiser l'évitement de file d'attente et les annulations de partie.

Les clients de jeu doivent enregistrer de façon persistante leur identifiant d’attribution entre les redémarrages du jeu, afin qu’en cas de plantage du client de jeu, ils puissent récupérer les détails de connexion et tenter de se reconnecter.

☑️ Essayez de vous connecter depuis votre client de jeu au serveur attribué.

☑️ Une fois que vous avez vérifié que vous pouvez vous connecter à votre déploiement sans problème et que vous avez terminé les tests, Arrêtez votre déploiement pour libérer de la capacité sur votre compte pour la prochaine version.

✅ Vous pouvez maintenant passer à l’étape suivante.

Trouvez la spécification OpenAPI pour les tests à {matchmaker-url}/swagger/v1/swagger.json.

5. Intégration du jeu

Matchmaker s’intègre avec :

☑️ Dans Client de jeu, nous recommandons de fournir aux joueurs des mises à jour de statut des tickets via l’interface en jeu pour une meilleure expérience joueur. Voir :

☑️ Dans Client de jeu, assurez-vous de gérer les 429 Trop de requêtes erreurs récupérables avec un backoff exponentiel et des tentatives, en laissant au matchmaker le temps de se rétablir lors de pics soudains de trafic.

☑️ Dans Client de jeu, assurez-vous de gérer les erreurs non récupérables :

  • 404 Not Found - le ticket a été supprimé,

  • 500 Internal Server Error - panne temporaire du service.

☑️ Dans Serveur de jeu, lisez les préférences du joueur et le contexte initial du serveur :

  1. Variables injectées (Matchmaker) pour récupérer les données de matchmaking initiales des joueurs.

  2. Variables injectées (versions de l’application) pour les paramètres de version, les paramètres et les secrets.

  3. Variables injectées (déploiement) pour les informations de déploiement, l’IP, l’emplacement, etc...

Utilisez GetEnvironmentVariable en C# ou GetEnvironmentVariable en C++ pour obtenir les valeurs des variables.

☑️ Une fois les joueurs connectés, Serveur de jeu et clients de jeu démarrez une scène de chargement - scène 3D, interface sociale de type lobby, ou écran de chargement avec barre de progression, pour indiquer que l’initialisation progresse.

☑️ Assurez-vous que votre déploiement sera arrêté correctement une fois le match terminé.

🙌 Félicitations, vous avez terminé l’intégration du matchmaking ! Pour en savoir plus, continuez la lecture.

🏁 Exemple avancé

Une configuration complète utilisant toutes les fonctionnalités de matchmaking, y compris Profils (files d’attente), Règles, et Regard approfondi pourrait ressembler à ceci :

🏁 Exemple avancé (configuration d'exemple complète)

🥛 Démonstration de backfill

En s’appuyant sur Appariement, cette configuration met en avant Backfill avec Groupes.

🥛 Exemple de configuration de backfill

Optionnellement, certains jeux peuvent avoir des besoins particuliers en matière de matchmaking, tels que :

  • permettre à de nouveaux joueurs de rejoindre des parties en cours (amis ou « aléatoires »),

  • remplacer les joueurs qui quittent (abandonneurs) après le démarrage du serveur afin d’éviter de relancer la partie,

  • permettre aux spectateurs de rejoindre et d’observer les matchs de tournoi ou d’amis (e-sport),

  • centraliser les joueurs sur des serveurs plus grands afin d’offrir davantage d’interactions sociales (MMO).

Le backfill est un ticket détenu par le serveur représentant les joueurs actuellement connectés au serveur. Cela garantit que les joueurs ajoutés ultérieurement respecteront vos règles de matchmaking lorsqu’ils seront mis en correspondance avec les joueurs actuels.

Scénarios de backfill visualisés

Les étapes pour réaliser un backfill réussi sont :

  1. Le serveur crée un Backfill pour chaque équipe à laquelle il manque des joueurs, en utilisant les valeurs provenant de :

    • Réel affectation données récupérées depuis Variables injectées (déploiement).

    • des joueurs actuellement connectés tickets:

      • depuis Regard approfondi (matchmaker), des backfills précédents assigned_ticket réponse, ou des données fictives manipulées pour correspondre à des joueurs spécifiques,

      • remplacer backfill_group_size les valeurs par les tailles de groupe possibles jusqu’à la capacité disponible,

  2. Les clients de jeu créent de nouveaux tickets (adhésions) et incluent backfill_group_size valeurs :

    • "1" si le joueur effectue le matchmaking seul.

    • "2" si le joueur fait partie d’un groupe de matchmaking de 2x membres au total.

    • "nouveau" si les joueurs ont activé le lancement de nouvelles parties en plus de la possibilité de rejoindre des parties en cours.

  3. Les clients de jeu passent ensuite à Regard approfondi et associent les joueurs au backfill correspondant.

  4. Si le groupe complété par backfill n’a pas entièrement rempli l’équipe, le serveur peut répéter ce processus avec les tickets des joueurs nouvellement ajoutés via backfill, afin d’ajouter davantage de joueurs et d’atteindre les tailles d’équipe souhaitées.

🥛 Exemple de backfill (présentation du backfill)
🥛 Exemple d’affectation de backfill (présentation du backfill)

Voir Gestion des sièges Mirror et Gestion des sièges FishNet pour surveillance de la connexion des joueurs.

⚔️ Jeux compétitifs

Les jeux compétitifs se concentrent sur des joueurs qui s’affrontent pour obtenir la victoire, que ce soit individuellement (tous contre tous) ou en équipes. Garantissez des matchs justes et équilibrés en associant des joueurs ou des équipes de niveaux de compétence similaires, et maintenez le rythme du jeu en trouvant rapidement une compétition équitable.

⚔️ Exemple de jeu compétitif

Vous pouvez définir plusieurs équipes avec 1 joueur ou plus chacune, par exemple :

Mode de jeu
Nombre d’équipes
Taille de l’équipe
Total de joueurs

FPS 5v5

2

5

10

MOBA 5v5

2

5

10

Battle Royale 20x3

20

3

60

Tous contre tous 10 joueurs

1

10

10

Définissez plusieurs Profils (files d’attente) pour des règles et paramètres spécifiques au mode de jeu, et étendez selon les besoins.

  • Pour tous les matchs :

    • restreindre la latence du matchmaking pour éviter de jumeler des joueurs trop éloignés,

    • Regard approfondi pour les groupes préformés et empêcher de dépasser les tailles d’équipe,

    • assouplir progressivement les restrictions de latence au fil du temps pour trouver plus de joueurs,

    • allouer plus de CPU ou de mémoire avec différents Applications et versions pour des profils spécifiques,

  • Pour les matchs occasionnels :

    • omettre les restrictions de classement pour maximiser la vitesse de mise en relation et le taux de remplissage des matchs,

    • laisser les joueurs fournir leurs préférences de carte pour trouver une carte adaptée à tout le monde,

    • spécifier la taille du groupe de backfill pour remplacer les joueurs quittants sans dépasser les tailles d’équipe,

    • supprimer les limitations de latence pour garantir un match après 3 minutes (180 s) d’attente en file.

  • Pour les matchs compétitifs :

    • restreindre le rang pour n’autoriser que des adversaires de niveau de compétence similaire,

    • utiliser des rangs de promotion ou de relégation pour jumeler les joueurs aux extrémités du classement de la ligue.

  • Pour le top 1 % des matchs de haut niveau (challengers) :

    • utiliser des notes de compétence numériques (ELO) pour obtenir un contrôle précis de la distribution des niveaux dans les matchs,

    • attendre plus longtemps avant d’assouplir les exigences de latence en raison du plus faible nombre de joueurs.

🤝 Jeux coopératifs

Les jeux coopératifs exigent des joueurs qu’ils travaillent ensemble en équipe vers un objectif commun, ou contre un adversaire IA. Faites correspondre des joueurs ayant des préférences et des habitudes de jeu similaires. Remplacez les joueurs qui quittent, et améliorez Balises de ping pour offrir une expérience joueur réactive.

🤝 Exemple de jeu coopératif

Avec un nombre d’équipes de 1 et une taille maximale d’équipe de 4, exigez jusqu’à 4 joueurs par match.

Définissez plusieurs Profils (files d’attente) pour des règles et paramètres spécifiques au mode de jeu :

  • commencez avec un minimum de 4 joueurs pour garder les joueurs en file et maximiser le taux de remplissage des matchs,

  • restreindre la latence du matchmaking pour éviter de jumeler des joueurs trop éloignés,

  • laissez les joueurs choisir une difficulté de jeu particulière pour convenir au niveau de compétence de tout le monde,

  • laisser les joueurs fournir leurs préférences de carte pour trouver une carte adaptée à tout le monde,

  • restreindre l’écart de niveau des joueurs pour exiger un degré de progression de jeu similaire,

  • spécifier la taille du groupe de backfill pour remplacer les joueurs quittants sans dépasser la capacité du serveur,

  • utiliser des indicateurs de modération pour séparer les joueurs à faible karma et les tricheurs de la population générale,

  • Regard approfondi pour les groupes préformés et pour compléter les équipes sans dépasser la capacité du serveur,

  • allouer plus de CPU ou de mémoire en utilisant différents Applications et versions pour d’autres profils.

Commencez avec les conditions idéales, et étendez les restrictions pour garantir des matchs rapides :

  • assouplir les restrictions de latence au fil du temps pour trouver plus de joueurs,

  • augmenter l’écart de niveau de joueur autorisé pour trouver plus de joueurs,

  • réduire la taille minimale de l’équipe pour exiger moins de joueurs et lancer le jeu plus tôt,

    • le serveur peut remplir les emplacements vides avec des coéquipiers IA,

    • ou Regard approfondi pour ajouter des joueurs plus tard,

  • définissez la taille minimale de l’équipe à 1 pour lancer le jeu en solo après 150 s d’attente en file.

🎈 Jeux sociaux

Les jeux sociaux se concentrent sur la création de liens et de relations entre les joueurs par la collaboration, la communication et le partage d’expériences. Prenez en charge un grand nombre de joueurs, maximisez le taux de remplissage des matchs et alignez les préférences et habitudes de jeu des joueurs. Remplacez les joueurs qui quittent, et assurez un haut Balises de ping pour offrir une expérience joueur réactive.

🎈 Exemple de jeu social

Avec un nombre d’équipes de 1 (tous contre tous) et une taille maximale d’équipe de 50, exigez jusqu’à 50 joueurs par match.

Définissez Profils (files d’attente) pour des règles et paramètres spécifiques au mode de jeu :

  • restreindre la latence du matchmaking pour éviter de jumeler des joueurs trop éloignés,

  • laissez les joueurs fournir leurs préférences de mode de jeu et trouver un mode adapté à tout le monde,

  • spécifier la taille du groupe de backfill pour remplacer les joueurs quittants sans dépasser la capacité du serveur,

  • utiliser des indicateurs de modération pour séparer les joueurs à faible karma et les tricheurs de la population générale,

  • Regard approfondi pour des lobbys préformés ou pour compléter des équipes sans dépasser la capacité du serveur,

  • allouer plus de CPU ou de mémoire en utilisant différents Applications et versions pour d’autres profils.

Commencez avec les conditions idéales, et étendez les restrictions pour garantir des matchs rapides :

  • assouplir les restrictions de latence au fil du temps pour trouver plus de joueurs,

  • réduire progressivement la taille minimale de l’équipe pour exiger moins de joueurs et lancer le jeu plus tôt,

    • le serveur peut remplir les emplacements vides avec des joueurs IA,

    • ou Regard approfondi pour ajouter des joueurs plus tard,

  • définissez la taille minimale de l’équipe à 1 pour lancer le jeu en solo après 150 s d’attente en file.

Mis à jour

Ce contenu vous a-t-il été utile ?