# Vue approfondie

Apprenez-en davantage sur les concepts approfondis du matchmaking sans code d’Edgegap et personnalisez-les selon vos besoins.

## ✔️ Introduction

**Commencez en moins de 5 minutes et testez toutes les fonctionnalités gratuitement, sans carte de crédit requise.**

Passez à la version supérieure lorsque vous êtes prêt pour un cluster plus puissant et privé (dédié). L’intégration native avec Edgegap [Déploiements](/docs.edgegap.com-fr/learn/orchestration/deployments.md) offre un ping de premier ordre, peu importe où se trouvent vos joueurs.

{% hint style="info" %}
Le niveau gratuit permet 3 heures d’exécution après chaque redémarrage. Votre matchmaker fonctionnera sur une infrastructure partagée avec des ressources limitées, adaptée aux tests. **Après votre mise en ligne publique, le matchmaker doit fonctionner 24h/24 et 7j/7.**
{% endhint %}

Il existe trois concepts essentiels à chaque Matchmaker :

* [#hosting-cluster](#hosting-cluster "mention") - l’infrastructure serveur sous-jacente, entièrement gérée et exploitée par Edgegap.
* [#configuration](#configuration "mention") - l’ensemble des règles et paramètres qui définissent le fonctionnement du matchmaker.
* 🌐 Instance de service **-** service de matchmaking en direct fonctionnant 24h/24 et 7j/7 sur le cluster, utilisant la configuration pour mettre les joueurs en relation et produire des affectations de déploiement (serveur).

{% hint style="success" %}
[Mettez souvent à jour la version de votre matchmaker](#changelog) sur **pour profiter des nouvelles fonctionnalités et des corrections de bugs.**
{% endhint %}

## ▶️ Démarrer le matchmaking

**Démarrez rapidement - ajoutez l’exemple de démarrage de notre SDK à votre jeu**:

Apprenez-en davantage sur le processus de matchmaking afin de personnaliser, dépanner et optimiser l’intégration de votre jeu :

<figure><img src="/files/afb83dff8e2b537cadf95c995fb02354a9ccfbec" alt=""><figcaption><p>Séquence de matchmaking</p></figcaption></figure>

1. [Authentifier le joueur](#authenticate) - empêche les copies piratées de jouer en ligne,
2. [Créer un salon](#create-group) - rejoignez vos amis et partagez les préférences joueur/match,
3. [**Former un groupe**](#group-up) **- enregistrez votre salon comme un groupe de matchmaking,**
4. [**Trouver un match**](#find-match) **- préparez-vous et commencez à chercher un match (nouveau ou existant),**
   1. Attribuer un serveur et injecter les tickets - le serveur est automatiquement attribué après quelques secondes,
5. [**Se connecter et s’authentifier**](#connect-to-server) **- tenter une connexion sécurisée au serveur de jeu,**
   1. Confirmer l’identité - le serveur vérifie l’identité du client de jeu à l’aide de jetons tiers,
   2. Accepter le joueur ou le renvoyer - le serveur décide si le joueur est autorisé à rejoindre.

### Authentifier

{% hint style="success" %}
**Ce jeton peut être inclus en toute sécurité dans votre client de jeu, car il ne donne pas accès à l’API Edgegap.**
{% endhint %}

Les joueurs individuels peuvent être identifiés à l’aide de leur ID de ticket, disponible côté client et serveur. En option, ajoutez une authentification personnalisée ou des limites avec un proxy personnalisé utilisant [#server-to-server-api](#server-to-server-api "mention") l’API.

### Former un groupe

La création d’un groupe (party) garantit que les joueurs rejoignent la même équipe et le même serveur que leurs amis.

{% hint style="success" %}
Créez un groupe marqué comme prêt pour [#find-match](#find-match "mention") rapidement en tant que **joueur solo sans membres de groupe**.
{% endhint %}

<figure><img src="/files/663f995c9cb62350eb464c595bf9695972bcf4bb" alt=""><figcaption><p>Diagramme d’activité du cycle de vie du groupe</p></figcaption></figure>

#### Salon et groupe

Utilisez un service de salon si la conception de votre jeu nécessite de définir des préférences de matchmaking contrôlées par le joueur (par ex. choix du personnage, difficulté, carte, etc.). Lorsque les joueurs rejoignent et quittent le salon, ils mettent aussi à jour le groupe de matchmaking afin de se préparer à trouver un match plus tard.

{% hint style="success" %}
**Pas le temps de mettre en place un service de salon ?** Invitez les joueurs à partager les ID de groupe via Discord ou des messages privés.
{% endhint %}

<table><thead><tr><th width="390">Conception du jeu - Fonctionnalité / Exigence</th><th>Salon pré-match</th><th>Groupe du matchmaker</th></tr></thead><tbody><tr><td><a data-footnote-ref href="#user-content-fn-1">inviter des amis à jouer avec moi</a></td><td>✅</td><td>✅</td></tr><tr><td>modifier mes préférences joueur/match</td><td>✅</td><td>❌</td></tr><tr><td>voir les préférences des autres membres du salon</td><td>✅</td><td>❌</td></tr><tr><td>stocke et gère des données personnalisées clé-valeur</td><td>✅</td><td>❌</td></tr><tr><td>notifier les membres du groupe que je suis prêt à jouer</td><td>❌</td><td>✅</td></tr><tr><td>afficher la progression du matchmaking et trouver un match</td><td>❌</td><td>✅</td></tr><tr><td>obtenir l’affectation d’équipe pour un joueur/groupe</td><td>❌</td><td>✅</td></tr><tr><td>récupérer les détails de connexion au serveur de jeu</td><td>❌</td><td>✅</td></tr></tbody></table>

Notre matchmaker multiplateforme prend en charge tous les services de salon commerciaux et personnalisés :

<table><thead><tr><th>Service de salon (tiers)</th><th width="120" data-type="checkbox">Unreal Engine</th><th width="75" data-type="checkbox">Unity</th><th width="50" data-type="checkbox">PC</th><th width="90" data-type="checkbox">Consoles</th><th width="65" data-type="checkbox">VR/XR</th><th width="100" data-type="checkbox">Mobile</th></tr></thead><tbody><tr><td><a href="https://dev.epicgames.com/docs/game-services/lobbies-and-sessions/lobbies/lobbies-intro">Salon des services en ligne Epic</a><br>(Epic Games)</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td></tr><tr><td><a href="https://partner.steamgames.com/doc/features/multiplayer/matchmaking#friends">Salon Steamworks</a><br>(Valve Corporation)</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td></tr><tr><td><a href="https://heroiclabs.com/docs/nakama/concepts/groups/">Groupe Nakama</a><br>(Heroic Labs)</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td></tr><tr><td><a href="https://learn.microsoft.com/en-us/gaming/playfab/community/associations/groups/quickstart">Salon Playfab</a><br>(Microsoft)</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td></tr><tr><td><a href="https://docs.braincloudservers.com/learn/key-concepts/multiplayer/lobbies/#lobby-experience">Salon brainCloud</a><br>(bitHeads)</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td></tr><tr><td><a href="https://developer.apple.com/documentation/gamekit/connecting-players-with-their-friends-in-your-game">Amis Gamekit</a><br>(Apple)</td><td>true</td><td>true</td><td>false</td><td>false</td><td>false</td><td>true</td></tr><tr><td>Salon personnalisé<br>(votre entreprise)</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td><td>true</td></tr></tbody></table>

Le propriétaire du salon (le joueur qui envoie les invitations) doit également créer le groupe de matchmaking.

**Stockez l’ID de votre groupe dans vos données de salon partagées**, afin que les autres membres du salon puissent facilement trouver et rejoindre un groupe de matchmaking associé au salon tiers. Les joueurs invités au groupe utilisent l’ID du groupe pour **créer leurs adhésions (rejoindre)**&#x65;t pour **enregistrer de manière sécurisée leurs** [**attributs de matchmaking**](#matchmaking-rules)**.**

{% hint style="warning" %}
**Une fois qu’un groupe commence le matchmaking, il ne peut plus être rejoint.** [#abandon-queue](#abandon-queue "mention") et en créer un nouveau.
{% endhint %}

#### Optimisation du ping

Si [#configuration](#configuration "mention") comprend [`latences` règle](#rule-example-elo_rating) tous les membres du groupe envoient leurs [Balises Ping](/docs.edgegap.com-fr/learn/orchestration/ping-beacons.md) mesures à **empêcher l’appariement de joueurs dans des régions éloignées** ou avec un ping (latence) beaucoup plus élevé ou plus faible.

{% code title="Exemple de mesures de ping du client de jeu en millisecondes" %}

```json
{
  "Chicago": 224.4,
  "Francfort": 23.2,
  "Tokyo": 167.4
}
```

{% endcode %}

#### **Abandonner la file**

Le propriétaire du groupe peut supprimer le groupe, ce qui supprime automatiquement toutes les adhésions au groupe. La suppression du groupe après le début du matchmaking annulera toutes les adhésions et les supprimera peu après.

Les membres du groupe (sauf le propriétaire) peuvent supprimer leurs adhésions (quitter le groupe) à tout moment avant [#find-match](#find-match "mention"). La suppression d’une adhésion par la suite annulera le matchmaking pour l’ensemble du groupe.

{% hint style="info" %}
Une fois le matchmaking annulé, les membres sont [retirés automatiquement du matchmaking](#matchmaking-profiles) et notifiés via le statut de l’adhésion `status:CANCELLED`  dans leur prochaine réponse de sondage de statut.
{% endhint %}

Une fois annulé, si le groupe souhaite relancer le matchmaking, le propriétaire du groupe doit recréer le groupe, partager le nouvel ID de groupe avec les membres et leur faire recréer leurs adhésions.

**Une fois qu’un match est trouvé, le groupe ne peut plus être supprimé** (`409 Conflict`), et sera [retiré automatiquement](#connect-to-server). Votre serveur doit laisser un certain délai (par ex. 60 s) aux joueurs pour se connecter avant de considérer qu’un joueur a abandonné.

Si votre serveur signale qu’un joueur a abandonné, vous pouvez :

* remplacer le joueur parti par un personnage IA pour démarrer immédiatement le match,
* ou créer un [backfill](#backfill-match) pour trouver un nouveau joueur pour remplacer celui qui est parti,
* ou continuer sans remplacer le joueur parti, si la conception de votre jeu permet un nombre variable de joueurs.

### Trouver un match

Pour commencer à chercher un match, tous les membres et le propriétaire doivent se marquer comme prêts.

{% hint style="success" %}
Pour permettre au propriétaire du groupe **de lancer immédiatement le matchmaking, marquez les adhésions comme prêtes à la création**. Une fois que le propriétaire se marque comme prêt, le matchmaking démarre, puisque tout le monde est prêt.
{% endhint %}

{% hint style="info" %}
Pour une meilleure expérience, **fournissez des mises à jour de statut aux joueurs via l’interface en jeu**.
{% endhint %}

**Tous les joueurs doivent interroger leur adhésion à intervalles réguliers** (recommandé 3 à 5 s) pour détecter le début du matchmaking et communiquer sa progression via l’interface en jeu.

Les joueurs doivent **enregistrer de manière persistante leurs IDs d’adhésion et de groupe**, ce qui leur permet de relancer le jeu et de reprendre sans perdre la progression du matchmaking en cas de plantage du client de jeu.

Une fois que nous avons trouvé suffisamment de joueurs pour les mettre dans la même équipe en respectant votre [#matchmaking-rules](#matchmaking-rules "mention"), les joueurs seront notifiés dans leur réponse d’adhésion avec `status:TEAM_FOUND`.

La suppression d’une adhésion à ce stade entraînera l’annulation de toutes les adhésions du groupe et le retour de toutes les autres équipes assignées à la même équipe vers `status:SEARCHING` .

Les équipes continuent le matchmaking avec d’autres équipes en utilisant les valeurs qui se recoupent entre leurs groupes (ou la moyenne dans le cas de `number_difference` ) jusqu’à ce que suffisamment d’équipes soient assemblées. Les adhésions l’indiquent avec la réponse  `status:MATCH_FOUND` , ce qui signifie que votre [déploiement est en cours de démarrage](https://docs.edgegap.com/docs.edgegap.com-fr/learn/matchmaking/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-1.-start-a-deployment).

**Le matchmaker vise à maximiser le taux de remplissage des matches et ne passera pas à `MATCH_FOUND` avant que l’une des conditions suivantes soit remplie :**

1. suffisamment d’équipes sont appariées avec la taille maximale d’équipe configurée,
2. ou si [#rule-expansion](#rule-expansion "mention") défini ET que le temps d’expansion est atteint, ET que suffisamment d’équipes sont appariées avec la taille minimale d’équipe configurée,
3. ou que le temps d’expiration du ticket configuré est écoulé ET que suffisamment d’équipes sont appariées avec la taille minimale d’équipe configurée.

Si aucun des deux scénarios ne réussit avant l’expiration configurée du ticket, le groupe et les tickets sont annulés.

{% hint style="info" %}
Vous rencontrez de longs temps d’attente pendant les tests, ou avec des joueurs dans des régions moins populaires ? Définissez une période d’expiration des tickets plus courte (par ex. 30 s) et recréez le groupe (ou les tickets) côté client à l’expiration.
{% endhint %}

L’expiration des tickets est automatiquement réinitialisée chaque fois qu’un groupe (ou un joueur) est apparié à une équipe.

{% hint style="success" %}
Stockez `team_id`  et `match_id` dans le backend de votre jeu pour afficher en jeu les informations des membres de l’équipe.
{% endhint %}

{% hint style="info" %}
Chaque joueur reçoit un **ID de ticket unique, qui peut être utilisé pour** [#authenticate](#authenticate "mention") **avec les serveurs de jeu.**
{% endhint %}

Si le joueur a été apparié et affecté à un serveur de jeu, son ticket est supprimé automatiquement. Les joueurs qui abandonnent la file après `status:HOST_ASSIGNED`  peuvent être remplacés par [backfill](#backfill-match).

Une fois que les joueurs reçoivent `status:HOST_ASSIGNED`  ils passent à [#connect-to-server](#connect-to-server "mention").

### Se connecter au serveur

### Match de backfill

Une fois l’initialisation du serveur de jeu terminée, **votre serveur doit**:

* **démarrer un minuteur d’abandon pour chaque nouveau joueur.** Nous recommandons d’indiquer la progression du chargement aux joueurs connectés avec une scène/un niveau de chargement - soit une scène 3D complète, une interface sociale de type salon, ou un écran de chargement avec barre de progression.
* **Surveillez les nouvelles connexions de joueurs ou les départs de joueurs existants au fil du temps**:
  1. Les nouveaux joueurs doivent annoncer leur ID de ticket au serveur pour l’authentification et pour mapper leur connexion au matchmaker [#injected-variables](#injected-variables "mention") ou `assigned_ticket` (si complété par backfill).
  2. Créez de nouveaux backfills pour la capacité joueur inutilisée (joueurs partis) tout au long de la durée de vie du serveur.
  3. Renouvelez les backfills expirés, qui sont supprimés après `ticket_expiration_period`.
* **Nettoyez (supprimez) tout backfill restant** une fois le [/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-5.-deployment-stopped](https://docs.edgegap.com/docs.edgegap.com-fr/learn/matchmaking/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-5.-deployment-stopped "mention"):
  * Unity - [`OnApplicationQuit`](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/MonoBehaviour.OnApplicationQuit.html) appel de rappel ou appel personnalisé de fin de partie,
  * Unreal Engine - [`OnWorldDestroyed`](https://forums.unrealengine.com/t/call-function-before-quit-game/344954/2) , [`PreExit`](https://forums.unrealengine.com/t/event-on-close/298087/2) , ou un appel personnalisé de fin de partie.

Tout profil peut être utilisé pour le backfill tant qu’une affectation de serveur valide et au moins un ticket sont fournis. Voir [Matchmaking](/docs.edgegap.com-fr/learn/matchmaking.md#backfill-showcase) pour un exemple minimal.

## ⚙️ Configuration

L’API du Matchmaker est générée à partir d’une configuration JSON spécifiée lorsque vous créez un nouveau Matchmaker (ou un redémarrage rapide). Vous pouvez spécifier n’importe quel nombre de profils avec des règles et des expansions différentes :

{% hint style="success" %}
Voir [Matchmaking](/docs.edgegap.com-fr/learn/matchmaking.md) pour nos SDKs et des scénarios d’exemple détaillés.
{% endhint %}

{% hint style="warning" %}
Modifier un matchmaker en cours d’exécution **déclenchera un rechargement rapide**, supprimant tous les tickets et provoquant une courte interruption.
{% endhint %}

### Profils (Files d’attente) <a href="#matchmaking-profiles" id="matchmaking-profiles"></a>

Les profils représentent des files de matchmaking entièrement séparées, partageant la même version du matchmaker. Vous pouvez **configurer n’importe quel nombre de profils pour chaque matchmaker.** Répartir votre base de joueurs en plusieurs profils peut entraîner des temps d’attente plus longs pour vos joueurs.

Chaque profil de matchmaker utilise une [Version de l’application](/docs.edgegap.com-fr/learn/orchestration/application-and-versions.md) comme modèle pour démarrer de nouveaux déploiements (serveurs).

{% hint style="success" %}
Certains modes de jeu peuvent nécessiter plus de vCPU / RAM, surtout s’ils prennent en charge un plus grand nombre de joueurs. Chaque **matchmaker peut inclure plusieurs profils**, chacun lié à une version d’application avec des ressources ajustées.
{% endhint %}

### Règles <a href="#matchmaking-rules" id="matchmaking-rules"></a>

Chaque joueur et groupe rejoint la file de matchmaking et trouve des matches en utilisant d’abord les  `règles` initiales

Chaque entrée du profil au chemin `.rules.initial` représente une règle, où :

* **clé** est une valeur chaîne pour nommer la règle comme vous le souhaitez ; par ex. `match_size` , et
* **valeur** est un objet définissant le type et les attributs de la règle, conformément à notre ensemble de règles standard.

{% hint style="info" %}
Toutes les règles doivent être satisfaites simultanément pour lancer l’affectation d’hôte et démarrer ou trouver un déploiement.
{% endhint %}

**Opérateurs (Type de règle)**

**`player_count`** est une règle spéciale définissant combien de joueurs doivent correspondre pour initier l’affectation.

{% hint style="warning" %}
La règle `player_count`  **est requis et ne peut être défini qu’une seule fois** dans vos règles de configuration initiale.
{% endhint %}

Le matchmaker s’efforce toujours de maximiser le taux de remplissage des matches, jusqu’à `max_team_size` :

1. si la taille maximale de l’équipe est atteinte, le match est créé immédiatement,
2. sinon, les joueurs attendent dans la file que le match se remplisse jusqu’à ce que [expansion](#rule-expansion) (ou expiration) soit sur le point d’arriver,
3. peu avant [d’expanser](#rule-expansion) (ou d’expirer), si un match partiel est possible (≥ taille minimale et < taille maximale de l’équipe), ce match sera créé avec tous les joueurs au même stade d’expansion (en supposant que les autres règles passent).

{% hint style="success" %}
Pour les modes de jeu coopératifs, free-for-all ou à taille d’équipe asymétrique, définissez votre `"team_count": 1` .
{% endhint %}

Le nombre d’équipes peut être configuré pour composer plusieurs équipes équilibrées pour les jeux compétitifs :

* **les attributs de groupe sont calculés comme la moyenne/le recoupement** des **attributs des joueurs du groupe,**
* **les attributs d’équipe sont calculés comme la moyenne/le recoupement** des **attributs de groupe de l’équipe.**

En supposant une taille d’équipe fixe de 4 joueurs :

<figure><img src="/files/f43554f07b1bdce5af7fc1776f692271ae328c81" alt=""><figcaption><p>Exemples de scénarios de match</p></figcaption></figure>

{% hint style="info" %}
**Les groupes sont appariés en équipes sans sur-remplissage,** uniquement si une équipe dispose de suffisamment de capacité pour accueillir tout le groupe.
{% endhint %}

**`string_equality`** associe les joueurs ayant exactement la même valeur de chaîne.

<details>

<summary>Exemple de règle : <code>selected_game_mode</code></summary>

`selected_game_mode`  la règle associera les joueurs en tenant compte de la casse :

:white\_check\_mark: Alice + Bob + Dave peuvent être appariés,

:x: Alice + Erin, ou Charlie + Frank ne seront jamais appariés.

| "Free For All" | "Capture The Flag" | "capture the flag" |
| -------------- | ------------------ | ------------------ |
| Alice          | Erin               | Frank              |
| Bob            | Charlie            |                    |
| Dave           |                    |                    |

</details>

**`number_difference`** associe les joueurs dont la différence numérique absolue entre eux est comprise dans la limite.

<details>

<summary>Exemple de règle : <code>elo_rating</code></summary>

`elo_rating`  règle ci-dessus avec `"max_difference": 50` initialement :

:white\_check\_mark: Alice + Bob peuvent être appariés, ou Bob + Charlie peuvent être appariés,

:x: Alice + Bob + Charlie ne seront jamais appariés.

<figure><img src="/files/45490cbc00ba08cf864d44534ed2124a19d62e1f" alt=""><figcaption></figcaption></figure>

</details>

**`intersection`** associe les joueurs ayant une ou plusieurs valeurs de chaîne qui se recoupent, en tenant compte de la casse.

<details>

<summary>Exemple de règle : <code>selected_map</code></summary>

`selected_map` règle ci-dessus avec `"overlap": 1`  permettra de faire correspondre :

:white\_check\_mark: Alice + Bob + Charlie peuvent être appariés, ou Alice + Bob + Dave peuvent être appariés,

:x: Alice + Bob + Charlie + Dave ne seront jamais appariés.

<figure><img src="/files/1d2ba7cf5bad262f01aff7346d110fb5582cd4d4" alt=""><figcaption></figcaption></figure>

</details>

#### Expansion des règles

Optionnellement, **`les expansions`**  modifient les attributs d’une règle après un certain temps passé dans la file afin d’assouplir les limitations et d’élargir le pool de joueurs pouvant être appariés, **ce qui permet des matches plus rapides**.

<details>

<summary>Exemple de scénario : expansions</summary>

[Initialement, nous exigeons 1 équipe composée exactement de 4 joueurs (éventuellement répartis en groupes)](/docs.edgegap.com-fr/learn/matchmaking.md#advanced-example) avec :

* latence maximale de 125 ms par rapport au même (n’importe quel) beacon,
* différence de latence de 125 ms ou moins entre la valeur la plus basse et la plus haute pour le même beacon,
* différence de classement de compétence de 50 points ou moins entre le joueur le moins et le mieux classé,
* exactement le même mode de jeu sélectionné (sensible à la casse),
* au moins une sélection de carte correspondante (sensible à la casse) parmi les joueurs,
* au moins une valeur correspondante de [taille du groupe de backfill](#backfill-match) parmi les joueurs.

Dans l’exemple ci-dessus, nous **élargissons la recherche en modifiant les attributs** après :

<table data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>30 secondes :</td><td><ul><li>4 joueurs</li><li><strong>plage de classement de compétence de 150</strong></li><li><strong>latence max 250 ms</strong></li></ul></td></tr><tr><td>60 secondes :</td><td><ul><li>4 joueurs</li><li><strong>plage de classement de compétence de 200</strong></li><li>latence max 250 ms</li></ul></td></tr><tr><td>3 minutes (180 s) :</td><td><ul><li><strong>1 à 4 joueurs</strong></li><li>plage de classement de compétence de 200</li><li><strong>n’importe quelle latence</strong></li></ul></td></tr></tbody></table>

</details>

{% hint style="info" %}
Les expansions de l’attribut de n’importe quelle règle **écraseront les valeurs précédentes** de cet attribut.
{% endhint %}

{% hint style="success" %}
[Apprenez-en davantage sur les pièges les plus courants du matchmaking](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs), et [optimisez votre taux de remplissage des matches grâce à nos conseils](https://edgegap.com/blog/how-to-optimize-session-fill-rate-in-your-matchmaker).
{% endhint %}

## 📌 Variables injectées

Votre serveur peut avoir besoin de connaître des détails sur ses joueurs. Les attributs des joueurs, les valeurs de match résolues et d’autres valeurs sont injectés dans votre déploiement avec les valeurs habituelles [Applications et versions](/docs.edgegap.com-fr/learn/orchestration/application-and-versions.md#injected-variables).

Prévisualiser non formaté **🏁 Variables avancées d’exemple :**

```
MM_MATCH_PROFILE=advanced-example
MM_EXPANSION=initial
MM_TICKET_IDS=["cusfn10msflc73beiik0","cusfn18msflc73beiil0"]
MM_TICKET_cusfn10msflc73beiik0={"id":"cusfn10msflc73beiik0","created_at":"2025-02-21T22:17:42.3886970Z","player_ip":"174.93.233.25","group_id":"b2080c27-19c9-4fb0-8fe7-4bf1e5d285d1","team_id":"cusfn1gmsflc73beiim0","attributes":{"beacons":{"Chicago":12.3,"LosAngeles":145.6,"Tokyo":233.2},"elo_rating":1337,"selected_game_mode":"quickplay","selected_map":["DustII","Airport","BankVault"],"backfill_group_size":["new","1"]}}
MM_TICKET_cusfn18msflc73beiil0={"id":"cusfn18msflc73beiil0","created_at":"2025-02-21T22:17:42.2548390Z","player_ip":"174.93.233.23","group_id":"015d4dc8-6c79-4b5c-bbc6-f309b9787c8f","team_id":"cusfn1gmsflc73beiim0","attributes":{"beacons":{"Chicago":87.3,"LosAngeles":32.4,"Tokyo":253.2},"elo_rating":1339,"selected_game_mode":"quickplay","selected_map":["Island","Airport"],"backfill_group_size":["new","1"]}}
MM_GROUPS={"b2080c27-19c9-4fb0-8fe7-4bf1e5d285d1":["cusfn10msflc73beiik0"],"015d4dc8-6c79-4b5c-bbc6-f309b9787c8f":["cusfn18msflc73beiil0"]}
MM_TEAMS={"cusfn1gmsflc73beiim0":["b2080c27-19c9-4fb0-8fe7-4bf1e5d285d1","015d4dc8-6c79-4b5c-bbc6-f309b9787c8f"]}
MM_MATCH_ID=advanced-example_initial-2025-02-21T22:17:43.3886970Z
MM_INTERSECTION={"selected_map":["Airport"],"backfill_group_size":["new","1"]}
MM_EQUALITY={"selected_game_mode":"quickplay"}
```

{% hint style="info" %}
Les variables d’environnement sont **stockées sous forme de JSON sérialisés en chaîne**, analysez-les à l’aide de notre SDK ou d’une méthode personnalisée.
{% endhint %}

{% hint style="success" %}
**Les serveurs peuvent associer les connexions des joueurs à des groupes et à des attributs** après que le joueur a envoyé son ID de ticket au serveur.
{% endhint %}

## 🧵 Traçage des joueurs

Si vos joueurs rencontrent des problèmes, retracer leur parcours jusqu’aux journaux du serveur peut être utile. Chaque déploiement de Matchmaker **de déploiement** **sera étiqueté avec les IDs de ticket des joueurs attribués** afin que vous puissiez facilement [Déploiements](/docs.edgegap.com-fr/learn/orchestration/deployments.md#filter-deployments) et trouver [Déploiements](/docs.edgegap.com-fr/learn/orchestration/deployments.md#container-logs) pour vous aider à dépanner.

{% hint style="success" %}
**Affichez les IDs de ticket et les IDs de déploiement dans l’interface d’historique des matches du client** pour tracer les joueurs lors du dépannage.
{% endhint %}

{% hint style="info" %}
Voir [Déploiements](/docs.edgegap.com-fr/learn/orchestration/deployments.md#connection-quality) pour en savoir plus sur le dépannage des déploiements.
{% endhint %}

## 👀 Analytique

Obtenez des informations sur la charge et les performances de votre matchmaker, sans code ni configuration requis.

🌟 [**Passez le Matchmaker au niveau Entreprise**](https://app.edgegap.com/matchmaker-management-v2/matchmakers/list) **pour débloquer les métriques et les informations de matchmaking :**

<figure><img src="/files/2d7cce3aaf617dc45f0dc36ef1d77039fe0178be" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/7a6f01aa536d33d8b8ddc3b8115be3414c2c0a91" alt=""><figcaption></figcaption></figure>

## ☁️ Cluster d’hébergement

Le Matchmaker est hébergé et géré 24h/24 et 7j/7 en toute simplicité par Edgegap.

Choisissez l’option d’hébergement la mieux adaptée à votre objectif :

#### Niveaux de cluster privé

Passez à un cluster privé en un clic. Il est également possible de changer les niveaux de cluster privé après le lancement, sans aucun temps d’arrêt pour les joueurs, avec [#rolling-updates-and-ab-tests](#rolling-updates-and-ab-tests "mention"). Les clusters gérés fournissent un hébergement de service haute disponibilité maintenu par Edgegap avec une assistance en direct 24h/24 et 7j/7 pour les jeux publiés au public.

Les besoins en ressources de votre instance dépendront de facteurs :

* **nombre de joueurs** - plus il y a de joueurs, plus il y a de tickets et de requêtes API,
* **nombre de requêtes par joueur** - des tentatives plus rapides augmentent la charge du service et consomment des ressources,
* **complexité de la configuration** - les règles d’intersection et les expansions sont particulièrement exigeantes,
* **durée moyenne des matches** - des sessions plus courtes poussent les joueurs à rejoindre le matchmaking plus souvent,
* **périodes d’expiration et de suppression** - les tickets obsolètes s’accumulent avec le temps et consomment des ressources,
* **logique de repli des nouvelles tentatives côté client** - réessayer avec un backoff à jitter aide à répartir les pics de trafic.

{% hint style="warning" %}
**Préparez-vous au succès et optimisez après le lancement, afin de ne pas bloquer vos joueurs le jour de la sortie.** Utilisez [Outils pour développeurs](/docs.edgegap.com-fr/unity/developer-tools.md#matchmaking-sdk) ou **mettre en œuvre un backoff exponentiel avec jitter** pour se remettre d’une charge élevée.
{% endhint %}

### Limites de débit

Pour protéger votre cluster contre le dépassement de sa capacité de pic et éviter un crash, nous limitons le nombre de requêtes par seconde en fonction de nos tests de charge internes utilisant [Matchmaking](/docs.edgegap.com-fr/learn/matchmaking.md#advanced-example) la configuration.

<table><thead><tr><th>Point de terminaison API</th><th width="130">Niveau gratuit</th><th width="130">Niveau Hobbyist</th><th width="130">Niveau Studio</th><th width="130">Niveau Enterprise</th></tr></thead><tbody><tr><td><strong>Limite globale</strong></td><td><strong>100</strong></td><td><strong>200</strong></td><td><strong>750</strong></td><td><strong>2,000</strong></td></tr><tr><td>Créer un déploiement</td><td>5</td><td>10</td><td>30</td><td>30</td></tr><tr><td>Lister les beacons</td><td>10</td><td>20</td><td>75</td><td>200</td></tr><tr><td>Créer un groupe<br>+ Créer un ticket<br>+ Créer un ticket de groupe</td><td>10</td><td>20</td><td>75</td><td>200</td></tr><tr><td>Lire l’adhésion<br>+ Lire le groupe<br>+ Lire le ticket</td><td>10</td><td>120</td><td>450</td><td>1,300</td></tr><tr><td>Créer un backfill</td><td>5</td><td>10</td><td>37</td><td>100</td></tr></tbody></table>

Les limites de débit sont exprimées en **requêtes combinées par seconde vers l’ensemble spécifié de points de terminaison API**.

Si vos clients de jeu ne réessaient pas les requêtes lorsqu’ils reçoivent la réponse `429 Trop de requêtes`  **vos déploiements peuvent manquer de joueurs** qui cessent de lire leurs affectations en raison d’une charge élevée.

#### Tests de charge

Le matchmaking et les affectations nécessitent de l’utilisation CPU et mémoire, ce qui entraîne un coût d’hébergement pour chaque matchmaker privé. Consultez les ressources et les prix associés à chaque niveau sur [notre page de tarification](https://edgegap.com/resources/pricing#matchmaker).

{% hint style="success" %}
**Utilisez toujours** [**des clusters privés**](#private-cluster-tiers) **pour les tests de charge.** Les matchmakers gratuits sont strictement limités aux tests de développement uniquement.
{% endhint %}

Lorsque vous concevez votre test de charge, **veuillez prendre en compte des schémas de joueurs réalistes**:

| Scénario réaliste                                                                                                 | Schéma de trafic irréaliste                                                                                  |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| ✅ Les joueurs rejoignent progressivement le matchmaking, augmentant les req/s sur plusieurs heures.               | ❌ Tous les joueurs se coordonnent et créent leurs tickets exactement à la même seconde.                      |
| ✅ Les joueurs attendent un délai croissant entre leurs nouvelles tentatives (par ex. 1 s - 5 s - 10 s - 10 s).    | ❌ Tous les joueurs réessaient immédiatement après avoir reçu `429 Trop de requêtes`  la réponse.             |
| ✅ La plupart des joueurs recevront leur affectation dans un court délai (10 à 60 s) et cesseront d’interroger.    | ❌ Tous les joueurs continuent à interroger pendant une durée définie même après avoir reçu leur affectation. |
| ✅ La plupart des joueurs terminent leur partie (cela prend du temps) avant de relancer un nouveau matchmaking.    | ❌ Tous les joueurs relancent immédiatement un nouveau matchmaking après avoir reçu leur affectation.         |
| ✅ Le trafic de pointe est soutenu pendant 6 à 8 heures par jour, après quoi certains fuseaux horaires décrochent. | ❌ Le trafic de pointe est maintenu 24 heures sur 24, avec tous les joueurs jouant jour et nuit.              |

Si un matchmaker subit une charge élevée :

* si le CPU est limité, le matchmaking peut être ralenti,
* si le matchmaker manque de mémoire, il redémarrera sans perdre les informations des tickets, en espérant que les clients implémenteront un backoff exponentiel et que la montée en charge sera répartie sur une période plus longue.

## ⏩ Mises à jour progressives <a href="#rolling-updates-and-ab-tests" id="rolling-updates-and-ab-tests"></a>

Le suivi de la compatibilité entre les versions serveur et client peut vite devenir complexe. Suivez nos conseils pour des déploiements fiables, des mises à jour et la prévention des interruptions de service ou des problèmes de compatibilité.

**L’URL de votre Matchmaker et votre jeton d’authentification resteront toujours identiques après le redémarrage.**

{% hint style="danger" %}
**Créez des matchmakers distincts pour le développement et la production** afin de faire des expérimentations en toute sécurité.
{% endhint %}

#### ⚠️ **Avant la mise en ligne**

Nous vous recommandons de créer plusieurs copies de votre matchmaker à l’avance : `vert`, `bleu` et `orange`. Vous pouvez faire tourner le matchmaker utilisé au fur et à mesure de vos mises à jour ([stratégie bleu/vert](https://en.wikipedia.org/wiki/Blue%E2%80%93green_deployment)).

**Choisissez des régions différentes pour chaque instance afin d’éviter les interruptions de service** lors de pannes localisées.

<figure><img src="/files/27a0e8e25ae2523767bcffd11b1a9e4dcb56547c" alt=""><figcaption><p>Exemple d’environnement DevOps bleu/vert</p></figcaption></figure>

#### **🔃 Mise à jour client + serveur**

**Prérequis :** Cette section suppose que vous avez terminé [#before-going-live](#before-going-live "mention").

Afin de **publier des mises à jour du client de jeu + du serveur**, vous pouvez :

1. Préparer une nouvelle version de l’application serveur `v1.2.0-rc` sur Edgegap :
   1. publier un nouveau tag d’image dans votre registre de conteneurs `t1.2.0`,
   2. créer une nouvelle version de l’application `v1.2.0-rc`,
2. Effectuer tous les tests de développement en [déployant votre nouvelle version de l’application](https://app.edgegap.com/deployment-management/deployments/list) `v1.2.0-rc`:
   1. connecter l’éditeur de votre moteur de jeu à l’URL fournie + au port externe,
3. Mettre à jour le matchmaker inutilisé `bleu` pour le lier à votre nouveau tag d’image `t1.2.0`,
   1. activer la mise en cache pour la nouvelle version de l’application `v1.2.0-rc` , l’activation du cache pour cette version garantira que l’image est également mise en cache pour la version `v-blue`  puisqu’ils font référence au même tag,
   2. attendre que l’indicateur de mise en cache dans la version `v1.2.0-rc`  atteigne :green\_circle: vert,
4. Mettre à jour votre nouveau client de jeu `c2` pour utiliser la nouvelle version `v-blue` lors de la création des tickets :
   1. mettez à jour votre URL de base et votre jeton d’autorisation dans le client de jeu,
5. Effectuer les tests QA et les vérifications finales de votre nouveau client de jeu `c2`:
   1. si vous trouvez et résolvez des problèmes, recommencez le processus depuis le début,
   2. attendre 3 à 7 jours pour propager les changements DNS du matchmaker aux FAI dans le monde entier, après l’arrêt du matchmaker (un redémarrage rapide ne nécessite pas de mises à jour DNS ni de période d’attente),
6. Publier votre nouvelle mise à jour du client de jeu `c2` sur les plateformes de distribution de jeux,
7. Accorder du temps au nouveau client de jeu `c2` pour se distribuer sur les appareils des joueurs (généralement jusqu’à 3 à 7 jours) :
   1. surveiller les clients de jeu obsolètes `c1`  à l’aide du déploiement [Déploiements](/docs.edgegap.com-fr/learn/orchestration/deployments.md#analytics),
8. Nettoyez les ressources inutilisées dans votre compte Edgegap :
   1. supprimer le tag d’image `t1.0.0` pour libérer de la capacité dans le registre de conteneurs,
   2. supprimer le tag d’image `t1.1.0` pour libérer de la capacité dans le registre de conteneurs,
   3. désactivez votre `vert`  matchmaker pour suspendre la facturation jusqu’à votre prochaine mise à jour.

{% hint style="success" %}
**Pour votre prochaine mise à jour**, augmentez les numéros de version et remplacez `vert` et `bleu` les mots-clés dans le guide.
{% endhint %}

#### **⚡ Correctif serveur**

**Prérequis :** Cette section suppose que vous avez terminé [#before-going-live](#before-going-live "mention").

Pour **publier un correctif serveur sans nécessiter de mise à jour du client de jeu**, vous pouvez :

1. Préparer une nouvelle version de l’application serveur `v1.2.0-rc` sur Edgegap :
   1. publier un nouveau tag d’image dans votre registre de conteneurs `t1.2.0`,
   2. créer une nouvelle version de l’application `v1.2.0-rc`,
2. Effectuer les tests et les vérifications en [déployant votre nouvelle version de l’application](https://app.edgegap.com/deployment-management/deployments/list) `v1.2.0-rc`:
   1. connecter l’éditeur de votre moteur de jeu à l’URL fournie + au port externe,
   2. si vous trouvez et résolvez des problèmes, recommencez le processus depuis le début,
   3. activer la mise en cache pour la nouvelle version de l’application `v1.2.0-rc` , l’activation du cache pour cette version garantira que l’image est également mise en cache pour la version `v-green`  plus tard puisqu’ils feront référence au même tag,
   4. attendre que l’indicateur de mise en cache dans la version `v1.2.0-rc`  atteigne :green\_circle: vert,
3. Mettre à jour la version `v-green`  pour le lier à votre nouveau tag d’image `t1.2.0`,
   1. les nouvelles parties commenceront automatiquement l’affectation avec le tag mis à jour `t1.2.0`,
   2. surveiller les clients de jeu obsolètes `c1`  à l’aide du déploiement [Déploiements](/docs.edgegap.com-fr/learn/orchestration/deployments.md#analytics),
4. Nettoyage des ressources inutilisées dans votre compte Edgegap :
   1. supprimer le tag d’image `t1.1.0` pour libérer de la capacité dans le registre de conteneurs.

## 📗 API <a href="#matchmaking-api" id="matchmaking-api"></a>

Les clients et les serveurs peuvent appeler l’API directement ou via les SDK du moteur de jeu, voir aussi [Matchmaking](/docs.edgegap.com-fr/learn/matchmaking.md).

### Serveur à serveur <a href="#server-to-server-api" id="server-to-server-api"></a>

Ajoutez des contrôles améliorés ou personnalisés sur le flux de matchmaking - implémentez un proxy personnalisé en utilisant notre [Clusters gérés](/docs.edgegap.com-fr/learn/advanced-features/managed-clusters.md) ou toute FaaS[^2] plateforme de calcul, pour réaliser l’un des éléments suivants :

* associer des attributs sensibles du joueur - tels que des indicateurs de triche, des évaluations de compétence ou similaires,
* fournir le contexte de l’équipe et du match en jeu - lister mes coéquipiers et mes adversaires pendant le chargement,
* restreindre certains cas particuliers - par exemple, n’autoriser qu’un seul groupe par joueur à la fois,
* ajouter de la mise en cache ou une limitation du débit de l’API - réduire le nombre de requêtes et la charge sur le matchmaker,
* personnaliser l’intégration lobby-groupe - créer des lobbies asymétriques ou basés sur des rôles avant le matchmaking.

{% hint style="success" %}
**Inclure le paramètre `player_ip`  avec l’adresse IP publique du membre** pour garantir la latence joueur la plus faible possible et tirer parti de [/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-1.-server-score-strategy-best-practice](https://docs.edgegap.com/docs.edgegap.com-fr/learn/matchmaking/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-1.-server-score-strategy-best-practice "mention").
{% endhint %}

{% hint style="info" %}
Les clients de jeu peuvent utiliser [ipify.org](http://ipify.org/) service gratuit pour trouver leur adresse IP publique. Les VPN peuvent masquer l’adresse IP publique.
{% endhint %}

<figure><img src="/files/a1e4a8060cb051104078a1375c254eea1c76aafa" alt=""><figcaption><p>Diagramme d’activité du matchmaking serveur à serveur</p></figcaption></figure>

#### Partage de ressources entre origines (CORS)

Pour les jeux WebGL hébergés sur des plateformes de distribution tierces (par ex. [itch.io](http://itch.io/)), l’envoi de toute requête au Matchmaker depuis le client de jeu peut entraîner [Partage de ressources entre origines](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) des violations de politique. La plupart des navigateurs web modernes envoient une [requête de pré-vérification](https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request) pour vérifier qu’un service backend (le Matchmaker) comprend et accepte la communication de votre client de jeu.

L’échec de la vérification préalable (comportement par défaut pour des raisons de sécurité) peut entraîner [l’une de plusieurs erreurs possibles liées à CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin), le plus souvent `En-tête CORS 'Access-Control-Allow-Origin' manquant` .

Pour résoudre cette erreur, ajoutez **`allowed_cors_origin`** paramètre à votre configuration pour :

* mettre sur liste blanche vos domaines d’hébergement exacts du client :

<details>

<summary>🍀 Exemple simple (exemple de domaines spécifiques)</summary>

<pre class="language-json"><code class="lang-json">{
  "version": "3.2.3",
  "allowed_cors_origins": [
    "https://dev.my-game-server.com",
    "https://prod.my-game-server.com"
  ],
  "profiles": {
      <a data-footnote-ref href="#user-content-fn-3">...</a>
  }
}
</code></pre>

</details>

* ou mettre sur liste blanche un domaine générique (y compris tous les sous-domaines) :

<details>

<summary>🍀 Exemple simple (exemple de domaine générique)</summary>

<pre class="language-json"><code class="lang-json">{
  "version": "3.2.3",
  "allowed_cors_origins": ["https://*.my-game-server.com"],
  "profiles": {
      <a data-footnote-ref href="#user-content-fn-3">...</a>
  }
}
</code></pre>

</details>

{% hint style="info" %}
**Aucun identifiant n’est requis pour les requêtes de pré-vérification du Matchmaker**, si les domaines sont correctement configurés.
{% endhint %}

## 🚨 Dépannage

**Votre réussite est notre priorité.** Si vous souhaitez envoyer des requêtes personnalisées, demander des fonctionnalités critiques manquantes ou partager vos idées, [veuillez nous contacter sur notre Discord communautaire](https://discord.gg/MmJf8fWjnt).

<details>

<summary>Pourquoi est-ce que je reçois des erreurs lorsque j’essaie de créer un nouveau matchmaker ?</summary>

* Veuillez lire l’erreur, il est possible que vous ayez mal orthographié un identifiant, une règle ou un opérateur. - Utilisez [JSONLint](https://jsonlint.com/) pour valider le format de votre JSON, il se peut qu’il manque une virgule ou une accolade. - Contactez-nous sur [notre Discord communautaire](https://discord.gg/MmJf8fWjnt) pour obtenir de l’aide, nous serons ravis de vous assister. 🙏

</details>

<details>

<summary>Pourquoi mon matchmaker s’est-il arrêté automatiquement après 3 heures ?</summary>

* Les matchmakers du niveau gratuit sont destinés aux tests initiaux et s’arrêtent automatiquement après 3 heures. Pour continuer à tester, vous pouvez [redémarrer votre matchmaker](https://app.edgegap.com/matchmaker-management-v2/matchmakers/list).
* Envisagez de passer à l’offre payante pour une durée d’exécution illimitée.

</details>

<details>

<summary>Pourquoi ne puis-je pas lancer un deuxième déploiement sur mon compte ?</summary>

* Vous ne pouvez exécuter qu’un seul déploiement simultané dans le niveau gratuit.
* Veuillez envisager de passer à l’offre payante pour des déploiements illimités.

</details>

<details>

<summary>Pourquoi est-ce que j’obtiens des affectations/déploiements à des moments aléatoires, en ignorant <code>player_count</code>?</summary>

* Vous ou un autre membre de l’équipe avez peut-être créé des tickets lors d’une session de test précédente qui n’ont pas été attribués. Veuillez [redémarrer votre matchmaker](https://app.edgegap.com/matchmaker-management-v2/matchmakers/list).

</details>

<details>

<summary>Mon ticket est bloqué en <code>RECHERCHE</code> .</summary>

* Veuillez vérifier que vous avez créé suffisamment de tickets correspondants conformes à votre configuration.

</details>

<details>

<summary>Mon ticket reste bloqué en alternant entre <code>MATCH_FOUND</code> et <code>TEAM_FOUND</code> de façon répétée.</summary>

* Les comptes du niveau gratuit sont limités à 1 déploiement à la fois.
* Veuillez envisager de passer à une offre supérieure ou d’arrêter votre déploiement en cours pour en lancer un nouveau.

</details>

<details>

<summary>Mon ticket passe directement à <code>ANNULÉ</code>.</summary>

* Votre ticket a atteint son expiration. Créez un nouveau ticket ou augmentez la période d’expiration dans votre configuration à des fins de test.

</details>

<details>

<summary>Je reçois <code>HTTP 404 Introuvable</code> lorsque je vérifie mon ticket.</summary>

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

</details>

<details>

<summary>Mon matchmaker affiche une erreur, que dois-je faire ?</summary>

* S’il s’agit d’une instance de développement ou de test, essayez d’abord de redémarrer votre matchmaker. - Veuillez signaler tout problème via [notre Discord communautaire](https://discord.gg/MmJf8fWjnt).
* Si ce problème impacte un jeu en direct, créez une [demande d’assistance urgente](https://edgegap.atlassian.net/servicedesk/customer/portal/3).

</details>

## 🔖 Journal des modifications

Votre fichier de configuration sera validé en fonction de la version du matchmaker utilisée ; assurez-vous que vos règles correspondent aux capacités de cette version du matchmaker.

{% hint style="info" %}
**La dernière version du matchmaker est `3.2.2`**. Tous les exemples sur cette page sont à jour.

Gardez un œil sur [les mises à jour et les annonces](/docs.edgegap.com-fr/docs/release-notes.md). Voir aussi [#rolling-updates-and-ab-tests](#rolling-updates-and-ab-tests "mention").
{% endhint %}

{% hint style="warning" %}
**Pour mettre à niveau votre version du matchmaker - Arrêter, Modifier, Redémarrer.** Le redémarrage rapide n’appliquera pas les changements de version.
{% endhint %}

[^1]: les clients du jeu rejoignent un salon pour récupérer l’ID de groupe de matchmaking et rejoindre le groupe

[^2]: [Function as a Service](https://www.ibm.com/think/topics/faas)

[^3]: voir d’autres exemples


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.edgegap.com/docs.edgegap.com-fr/learn/matchmaking/matchmaker-in-depth.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
