Découvrez comment fonctionne Edgegap

Découvrez comment fonctionne Edgegap

PlayFab

SpaceEdge

Déployer sur Edgegap

Publié

Publié

Publié

dernière vérification de l'exactitude

dernière vérification de l'exactitude

dernière vérification de l'exactitude

SpaceEdge : Exécutez un exemple de Matchmaking PlayFab sur des serveurs dédiés Edgegap, dans Unity

SpaceEdge : Exécutez un exemple de Matchmaking PlayFab sur des serveurs dédiés Edgegap, dans Unity

SpaceEdge est un petit jeu de tir spatial Unity qui montre le Matchmaking de PlayFab et Edgegap fonctionnant ensemble de bout en bout : PlayFab connecte les joueurs et les associe, et chaque partie bénéficie de son propre serveur de jeu dédié Edgegap.

PlayFab continue de faire ce qu'il sait faire : la gestion des comptes, les connexions et les files d'attente de matchmaking. Lorsqu'il trouve une partie, une fonction Azure démarre un serveur Edgegap à proximité des joueurs associés, et une seconde indique à chaque joueur où se connecter.

Aucun secret n'est intégré au jeu : le client ne contient que votre identifiant de titre PlayFab (Title ID), et le serveur de jeu ne détient aucun identifiant PlayFab ou Edgegap et n'admet que les joueurs associés. Le serveur s'arrête de lui-même lorsque les joueurs quittent la partie.

Le réseau d'Edgegap s'étend sur plus de 615 emplacements Edge Cloud (en savoir plus). Chaque serveur est déployé à l'emplacement disponible le plus adapté pour ses joueurs et n'est facturé que pendant la durée de la partie.

Plateformes : client de bureau Windows (testé). Un serveur dédié Linux, compilé avec le plugin Edgegap pour Unity. Le code client pourrait fonctionner sous WebGL, mais WebGL n'a pas été testé.

Comment ça fonctionne

  1. Le joueur se connecte à PlayFab et appuie sur Start Game : le client crée un ticket de matchmaking dans une file d'attente PlayFab.

  2. PlayFab associe deux joueurs et déclenche playfab.matchmaking.match_found. Une règle associée à cet événement exécute la fonction Azure StartEdgegapDeployment.

  3. La fonction recherche la localisation de chaque joueur et demande à Edgegap un déploiement à proximité d'eux, étiqueté avec le début de l'identifiant de la partie. La réponse intervient en environ une seconde.

  4. Lorsque le serveur est opérationnel, Edgegap appelle la seconde fonction, EdgegapDeploymentReady. Celle-ci vérifie le déploiement auprès de l'API Edgegap, puis écrit l'hôte et le port du serveur, ainsi qu'un jeton d'accès (join token), dans les données PlayFab en lecture seule de chaque joueur.

  5. Les deux clients lisent l'adresse, se connectent via UDP avec leur jeton d'accès et jouent. Le serveur refuse toute autre personne. Lorsqu'ils quittent la partie, le serveur met fin à son propre déploiement.

Contenu du dépôt :

Chemin

Rôle

azure-functions/

Les deux fonctions Azure (Node.js 22, aucun SDK PlayFab ou Edgegap).

.../PlayfabTest/PlayFabMatchmakingClient.cs

Client : connexion, ticket, attente de la partie, attente du serveur, connexion. UnityWebRequest et JsonUtility uniquement, aucun SDK PlayFab.

.../Edgegap/EdgegapServer.cs

Serveur : démarre le serveur de jeu dans les builds serveur et arrête le déploiement Edgegap à la fin de la partie. S'ajoute automatiquement à l'exécution, aucune configuration de scène requise.

.../Editor/EdgegapPluginBuild.cs

Compilations en ligne de commande : la compilation serveur du plugin Edgegap et le client de test Windows.

.../Edgegap/JoinTokenAuthenticator.cs

N'admet que les joueurs associés : vérifie le jeton d'accès envoyé par chaque client.

Aucune carte de crédit requise. L'offre gratuite inclut les ressources nécessaires pour déployer un véritable serveur de jeu.

Aucune carte de crédit requise. L'offre gratuite inclut les ressources nécessaires pour déployer un véritable serveur de jeu.

Guide étape par étape

Exécuter l'exemple

1. Avant de commencer

2. Déployez le serveur de jeu sur Edgegap

Ouvrez SpaceEdge_project dans Unity, puis Tools → Edgegap Server Hosting, et connectez-vous avec Edgegap.

Build server, puis Containerize with Docker : nom de l'image playfab-fishnet, tag d'image vide (le plugin utilise l'heure UTC actuelle).

Upload to Edgegap : application playfab-fishnet, puis Upload image and Create app version. Le plugin pousse l'image et ouvre le formulaire de version :

Sans l'Éditeur, le même build de serveur s'exécute depuis la ligne de commande :

"<Unity>" -batchmode -projectPath SpaceEdge_project -executeMethod EdgegapPluginBuild.BuildServer -logFile build-server.log

Pour les builds ultérieurs, Rebuild from Source compile, conteneurise et pousse en un seul clic.

Dans le formulaire de version :

  • Conservez l'image et le nom de version proposés par le plugin (le tag de l'image). Les Azure Functions ont besoin de ce nom. Si le formulaire demande des identifiants de registre, utilisez le nom d'utilisateur et le jeton de la page Container Registry.

  • Un port : nom gameport, 7770, UDP. Les fonctions recherchent le port sous ce nom.

  • 0,5 vCPU et 1 Go.

  • Une durée maximale de 60 minutes. Le serveur s'arrête également de lui-même.

La version ne nécessite aucune variable d'environnement ni aucun secret : les fonctions transmettent les détails du match et les jetons de connexion à chaque déploiement.

3. Configurez votre titre PlayFab

  1. File d'attente de Matchmaking (Multijoueur → Matchmaking → Nouvelle file d'attente) : nom edgegap-fishnet, taille du match 2-2, Enable server allocation désactivé, car Edgegap héberge les serveurs. Aucune règle n'est nécessaire pour faire correspondre deux joueurs quelconques.

  2. Let clients create players (icône d'engrenage → Paramètres du titre → Fonctionnalités de l'API) : décochez Disable player creation using Client/LoginWithCustomId. Les nouveaux titres l'ont cochée, et les connexions échouent avec PlayerCreationDisabled.

  3. Notez votre Title ID, et créez une Secret Key (Paramètres du titre → Clés secrètes) pour les Azure Functions.

4. Déployer les Azure Functions

Créez un groupe de ressources, un compte de stockage et une Function App Flex Consumption sur Node.js 22. PlayFab recommande une région de l'ouest des États-Unis (US West) :

az group create -n rg-edgegap-playfab -l westus2

az storage account create -n <storageaccount> -g rg-edgegap-playfab -l westus2 --sku Standard_LRS

az functionapp create -g rg-edgegap-playfab -n <function-app> --storage-account <storageaccount> --flexconsumption-location westus2 --runtime node --runtime-version 22

Dans azure-functions, exécutez npm ci --omit=dev, compressez host.json, package.json, src/ et node_modules/ dans bridge.zip, puis déployez-le :

az functionapp deployment source config-zip -g rg-edgegap-playfab -n <function-app> --src bridge.zip

Ajoutez les paramètres d'application (Function App → Settings → Environment variables) :

  • PLAYFAB_TITLE_ID et PLAYFAB_SECRET_KEY : obtenus à l'étape 3.

  • EDGEGAP_API_TOKEN : votre jeton Edgegap, sans le préfixe token.

  • EDGEGAP_APP_NAME / EDGEGAP_APP_VERSION : playfab-fishnet / le nom de version obtenu à l'étape 2. EDGEGAP_PORT_NAME est facultatif et a pour valeur par défaut gameport.

  • EDGEGAP_READY_WEBHOOK_URL : https://<function-app>.azurewebsites.net/api/EdgegapDeploymentReady?code=<function key>.

  • Facultatif : EDGEGAP_QUEUES pour attribuer des serveurs Edgegap à certaines files d'attente uniquement, et FALLBACK_LATITUDE / FALLBACK_LONGITUDE pour les joueurs que PlayFab ne parvient pas à localiser.

Obtenez la clé de chaque fonction avec az functionapp function keys list -g rg-edgegap-playfab -n <function-app> --function-name <name>. Les clés de fonction sont des secrets : ne committez pas et ne partagez pas d'URL les contenant.

Ensuite, dans PlayFab :

  1. Automation → CloudScript → Functions → Register Function : nommez-la StartEdgegapDeployment, avec son URL et sa clé de fonction.

  2. Automation → Rules → New Rule : type d'événement playfab.matchmaking.match_found, action Execute Azure Function → StartEdgegapDeployment.

N'enregistrez pas EdgegapDeploymentReady : c'est Edgegap qui l'appelle, pas PlayFab.

5. Jouer un match

  1. Ouvrez SpaceEdge_project et la scène Assets/SpaceEdge/Scenes/MainMenu.

  2. Sur l'objet PlayfabRestApiService (composant PlayFabMatchmakingClient), définissez Title Id. Queue Name est déjà défini sur edgegap-fishnet.

  3. Assurez-vous qu'aucun autre déploiement n'est en cours d'exécution : le niveau gratuit n'en exécute qu'un seul à la fois.

Vous avez besoin de deux joueurs. Compilez un client Windows (Mono, afin que le module Windows IL2CPP ne soit pas nécessaire) et exécutez-le deux fois, chacune avec son propre joueur PlayFab :

"<Unity>" -batchmode -projectPath SpaceEdge_project -executeMethod EdgegapPluginBuild.BuildClient -logFile build-client.log

SpaceEdge_project/Builds/Client/win64/Game.exe -playfabCustomId player-a

SpaceEdge_project/Builds/Client/win64/Game.exe -playfabCustomId player-b

Appuyez sur Start Game dans les deux. Une fois que PlayFab les a associés, un déploiement étiqueté avec le début de l'ID du match apparaît dans le tableau de bord Edgegap, et les deux clients s'y connectent quelques secondes plus tard. Quittez les deux : le serveur s'arrête de lui-même en moins d'une minute.

Autres options : -playfabTitleId <id>, -playfabQueue <name> et -autoMatch pour rejoindre la file d'attente juste après la connexion. Pour les clients de test sans interface graphique (headless), ajoutez -batchmode -nographics -client.

6. Ajoutez le Matchmaking PlayFab à votre propre jeu

L'exemple est une référence fonctionnelle : votre agent de code peut copier ses fichiers testés au lieu de les écrire de zéro. Quatre modifications permettent d'exécuter un jeu sur Edgegap avec le Matchmaking de PlayFab :

  1. PlayFab gère uniquement les correspondances. Désactivez l'allocation de serveur sur votre file d'attente, afin que PlayFab forme le match et qu'Edgegap l'héberge. Pas de GSDK et pas de builds PlayFab.

  2. Deux Azure Functions les connectent. L'une déploie un serveur à proximité des joueurs lors de match_found ; l'autre reçoit le webhook de disponibilité d'Edgegap et écrit l'adresse ainsi qu'un jeton de connexion dans les données en lecture seule de chaque joueur (azure-functions/, utilisable tel quel avec n'importe quel moteur).

  3. Le serveur s'exécute en mode headless et s'arrête de lui-même. Il écoute sur un port fixe, ne détient aucun secret, n'admet que les joueurs appariés et arrête son déploiement lorsque personne ne rejoint ou que tout le monde quitte (EdgegapServer.cs). Le netcode de l'exemple est FishNet ; pour un autre netcode, remplacez la partie qui démarre le serveur et compte les joueurs.

  4. Le client attend son serveur. Après Matched, il lit EdgegapServer depuis ses données en lecture seule et se connecte avec son jeton de connexion à host:port (PlayFabMatchmakingClient.cs, avec un appel de connexion spécifique au netcode).

Avec votre agent :

« Charge la compétence edgegap, puis edgegap-playfab et la compétence pour mon netcode. En utilisant github.com/edgegap/backend-game-sample-unity-playfab-matchmaker-fishnet-spaceedge comme référence, ajoute à mon jeu un mode serveur headless qui s'arrête de lui-même, déploie les deux Azure Functions sur mon abonnement et configure mon client pour se mettre en file d'attente dans PlayFab et se connecter à l'adresse indiquée dans ses données en lecture seule. »

Pour chaque étape en détail, manuellement, consultez le guide d'intégration PlayFab.

Limites connues

  • 2 joueurs par match. La file d'attente est de 2-2, et seules des files d'attente de 2 ont été testées. Pour des matchs plus grands, augmentez la taille de match de la file d'attente et testez à nouveau.

  • Clients Windows uniquement. Les versions clientes pour macOS et Linux n'ont pas été testées.

  • WebGL non testé. Le code client évite les threads et le SDK PlayFab, il pourrait donc s'exécuter dans un navigateur, mais une version Web nécessiterait également un port WebSocket avec mise à niveau TLS.

Ce qui a été testé

Testé de bout en bout sur Edgegap le 21 octobre 2026, avec Unity 2021.3.45f2, Node.js 22 sur Azure Functions (Flex Consumption) et une file d'attente PlayFab de 2 :

  • Deux clients se sont connectés et ont été associés par PlayFab.

  • La règle a exécuté StartEdgegapDeployment, un serveur a démarré près d'eux, et l'adresse a été transmise aux deux joueurs environ 8 secondes après l'appel de la fonction.

  • Tous deux se sont connectés au même serveur et ont joué.

  • Le serveur s'est arrêté de lui-même après que les joueurs ont quitté, et 2 minutes après le démarrage si personne ne l'a rejoint.

Les jetons de connexion et le build avec le plugin Edgegap Unity ont été ajoutés après ce test. Ils ont été testés le 29 octobre 2026 à l'aide de tests unitaires et d'un conteneur de serveur local : les joueurs associés ont pu entrer, les autres ont été rejetés, et un joueur ayant planté a pu se reconnecter. Non testé : clients WebGL, files d'attente supérieures à 2, règles de file d'attente basées sur la latence.

Questions Fréquemment Posées

Questions concernant l'exécution de l'exemple SpaceEdge avec PlayFab et Edgegap.

Existe-t-il un exemple de Matchmaking PlayFab pour Unity avec des serveurs dédiés ?

Oui. SpaceEdge est un jeu de tir spatial Unity où le Matchmaking PlayFab associe deux joueurs et deux Azure Functions démarrent un serveur dédié Edgegap près d'eux pour le match. Il a été testé de bout en bout en octobre 2026.

Pourquoi l'exemple utilise-t-il Azure Functions plutôt que CloudScript ?

Microsoft qualifie le CloudScript JavaScript de « classique » et oriente les nouveaux développements vers CloudScript à l'aide d'Azure Functions. Les fonctions permettent également à l'appel de déploiement d'aboutir en environ une seconde et de recevoir le webhook d'Edgegap lorsque le serveur est prêt.

Le serveur de jeu a-t-il besoin de la clé secrète PlayFab ?

Non. La clé secrète et le jeton Edgegap restent dans les paramètres de la Function App. Le client ne détient que l'identifiant du titre (title ID), et le serveur ne lit rien depuis PlayFab. Il vérifie les joueurs à l'aide de jetons de participation par match (join tokens) calculés par les fonctions.

Comment tester deux joueurs PlayFab sur une seule machine ?

Exécutez deux builds client avec des ID personnalisés différents, par exemple -playfabCustomId player-a et -playfabCustomId player-b. Les copies sur une même machine partagent PlayerPrefs, donc sans cela, les deux se connecteront en tant que même joueur.

Clients

Découvrez les témoignages de clients qui ont intégré Edgegap

31 études de cas sont disponibles auprès de studios ayant migré d'une autre plateforme vers Edgegap.

Principales raisons pour lesquelles ils ont choisi Edgegap

Découvrez l’impact de l’orchestration automatisée des serveurs de jeu d’Edgegap pour une expérience multijoueur impeccable.

Coût

Prix

Prix

Optimisez les coûts et les performances grâce à l'orchestration hybride

Optimisez les coûts et les performances grâce à l'orchestration hybride

Optimisez les coûts et les performances grâce à l'orchestration hybride

Cloud de périphérie

À la demande

0,00115 $

/ vCPU

/ MINUTE

Facturé à la minute, uniquement à l'utilisation

Payez quand les joueurs jouent. 0 serveur actif = 0 $

Déployez des serveurs de jeu dans le monde entier, par instance, dans plus de 615 emplacements edge cloud. Sans engagement.

Ajoutez simplement une carte de crédit.

Cloud de périphérie

À la demande

0,00115 $

/ vCPU

/ MINUTE

Facturé à la minute, uniquement à l'utilisation

Payez quand les joueurs jouent. 0 serveur actif = 0 $

Déployez des serveurs de jeu dans le monde entier, par instance, dans plus de 615 emplacements edge cloud. Sans engagement.

Ajoutez simplement une carte de crédit.

Cloud de périphérie

À la demande

0,00115 $

/ vCPU

/ MINUTE

Facturé à la minute, uniquement à l'utilisation

Payez quand les joueurs jouent. 0 serveur actif = 0 $

Déployez des serveurs de jeu dans le monde entier, par instance, dans plus de 615 emplacements edge cloud. Sans engagement.

Ajoutez simplement une carte de crédit.

Private Fleet (Bare Metal)

Capacité réservée

0,0261 $

/ vCPU

/ HEURE

Facturé mensuellement, toujours actif

280 $ par hôte/mois (tarif sur 12 mois), ou 350 $ par mois

Optimisez la rentabilité de votre serveur de jeu grâce à l'hébergement sans frais de transfert de données sortantes (egress-free) des flottes privées (Private Fleets).

Permanent, disponible 24h/24 et 7j/7, exclusif à votre studio.

Private Fleet (Bare Metal)

Capacité réservée

0,0261 $

/ vCPU

/ HEURE

Facturé mensuellement, toujours actif

280 $ par hôte/mois (tarif sur 12 mois), ou 350 $ par mois

Optimisez la rentabilité de votre serveur de jeu grâce à l'hébergement sans frais de transfert de données sortantes (egress-free) des flottes privées (Private Fleets).

Permanent, disponible 24h/24 et 7j/7, exclusif à votre studio.

Private Fleet (Bare Metal)

Capacité réservée

0,0261 $

/ vCPU

/ HEURE

Facturé mensuellement, toujours actif

280 $ par hôte/mois (tarif sur 12 mois), ou 350 $ par mois

Optimisez la rentabilité de votre serveur de jeu grâce à l'hébergement sans frais de transfert de données sortantes (egress-free) des flottes privées (Private Fleets).

Permanent, disponible 24h/24 et 7j/7, exclusif à votre studio.

Votre facture varie selon le tarif et l'utilisation, qui peuvent varier en fonction
du type de jeu, du nombre de joueurs et plus encore.

Votre facture varie selon le tarif et l'utilisation, qui peuvent varier en fonction
du type de jeu, du nombre de joueurs et plus encore.

Modélisez votre utilisation avec notre calculateur d'estimation ->

Modélisez votre utilisation avec notre calculateur d'estimation ->

Fonctionnalités et tarifs d'Edgegap : comparaison détaillée entre Edge Cloud et Private Fleets

Fonctionnalités et tarifs d'Edgegap : comparaison détaillée entre Edge Cloud et Private Fleets

COMPARER

Essai gratuit

Cloud de périphérie

Flottes privées

FONCTIONNALITÉS

Analyses et surveillance

Alertes de facturation

Cliquer pour agrandir

28 lignes de plus

Déverrouille

Les fonctionnalités sont débloquées lorsqu'une carte de crédit est ajoutée au compte.

COMPARER

Essai gratuit

Cloud de périphérie

Flottes privées

FONCTIONNALITÉS

Analyses et surveillance

Alertes de facturation

Cliquer pour agrandir

28 lignes de plus

Déverrouille

Les fonctionnalités sont débloquées lorsqu'une carte de crédit est ajoutée au compte.

COMPARER

Essai gratuit

Cloud de périphérie

Flottes privées

FONCTIONNALITÉS

Analyses et surveillance

Alertes de facturation

Cliquer pour agrandir

28 lignes de plus

Déverrouille

Les fonctionnalités sont débloquées lorsqu'une carte de crédit est ajoutée au compte.