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.
Cloner l'exemple : exemple SpaceEdge PlayFab sur GitHub
Guide complet : ajoutez Edgegap à votre propre jeu PlayFab grâce au guide d'intégration de PlayFab
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
Le joueur se connecte à PlayFab et appuie sur Start Game : le client crée un ticket de matchmaking dans une file d'attente PlayFab.
PlayFab associe deux joueurs et déclenche
playfab.matchmaking.match_found. Une règle associée à cet événement exécute la fonction AzureStartEdgegapDeployment.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.
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.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 |
|---|---|
| Les deux fonctions Azure (Node.js 22, aucun SDK PlayFab ou Edgegap). |
| Client : connexion, ticket, attente de la partie, attente du serveur, connexion. |
| 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. |
| Compilations en ligne de commande : la compilation serveur du plugin Edgegap et le client de test Windows. |
| N'admet que les joueurs associés : vérifie le jeton d'accès envoyé par chaque client. |
1. Avant de commencer
Un compte Edgegap gratuit et un jeton d'API provenant de Dashboard → User Settings → Tokens. Il s'applique à l'ensemble de l'organisation, il ne va donc que dans les paramètres de votre Function App, jamais dans le jeu.
Docker Desktop, pour la création d'images du plugin Unity d'Edgegap.
Un titre PlayFab.
Un abonnement Azure et l'Azure CLI.
Clonez l'échantillon.
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
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.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.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_IDetPLAYFAB_SECRET_KEY: obtenus à l'étape 3.EDGEGAP_API_TOKEN: votre jeton Edgegap, sans le préfixetoken.EDGEGAP_APP_NAME/EDGEGAP_APP_VERSION:playfab-fishnet/ le nom de version obtenu à l'étape 2.EDGEGAP_PORT_NAMEest facultatif et a pour valeur par défautgameport.EDGEGAP_READY_WEBHOOK_URL:https://<function-app>.azurewebsites.net/api/EdgegapDeploymentReady?code=<function key>.Facultatif :
EDGEGAP_QUEUESpour attribuer des serveurs Edgegap à certaines files d'attente uniquement, etFALLBACK_LATITUDE/FALLBACK_LONGITUDEpour 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 :
Automation → CloudScript → Functions → Register Function : nommez-la
StartEdgegapDeployment, avec son URL et sa clé de fonction.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
Ouvrez
SpaceEdge_projectet la scèneAssets/SpaceEdge/Scenes/MainMenu.Sur l'objet
PlayfabRestApiService(composantPlayFabMatchmakingClient), définissez Title Id. Queue Name est déjà défini suredgegap-fishnet.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 :
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.
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).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.Le client attend son serveur. Après
Matched, il litEdgegapServerdepuis 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.

Un lancement mondial impeccable pour Rivals of Aether 2
Aether Studios
Découvrez comment Aether Studios a rapidement ajouté Edgegap et a offert un lancement et un post-lancement sans faille à sa communauté.
Étude de cas

Surmontez la latence introduite par l'utilisation de WiFi par la réalité virtuelle dans les jeux multijoueurs compétitifs.
Halfbrick Studios
Découvrez comment Halfbrick a réussi à lancer et à maintenir un accès anticipé axé sur le multijoueur sur la plateforme VR META Quest.
Étude de cas

L'application sociale de MENA ajoute des jeux en ligne
WOLF
Découvrez comment l'application sociale très populaire de la région MENA a facilement ajouté des jeux de matchmaking et d'orchestration multijoueur à WOLF Qanawat.
Étude de cas

L'orchestration hybride maintient Kickoff Tactics prêt pour tout type de trafic
Birch Games
Comment l'orchestration hybride d'Edgegap pour gérer tant le le trafic prévisible et imprévisible, grâce aux flottes "egress-free" et le cloud.
Étude de cas

Lunes de sang de 7 jours
The Fun Pimps & iLLOGIKA
Découvrez comment Illogika a considérablement réduit ses coûts de serveur et garanti l'expérience en ligne attendue par la franchise 7 Days to Die.
Étude de cas

La guerre en ligne authentique nécessite l'orchestration ultime
Highwire Games
Découvrez comment le besoin de performance de Highwire nécessite une orchestration que seul Edgegap peut fournir.
Étude de cas

22 000 avis, 4,8 étoiles et une infrastructure qui s'est adaptée automatiquement
Sinn Studios
Comment une intégration simple, prise en charge par Slack, a permis au titre VR à succès de Sinn Studio d'être mis en ligne rapidement et de s'y maintenir.
Étude de cas

Orchestration de Serveurs Dynamiques
Under NDA - AAA Studio
Découvrez comment l'un des plus grands studios AAA du monde a amélioré son expérience multijoueur pair à pair grâce à l'informatique en périphérie.
Étude de cas

Latence presque nulle pour un jeu de combat AAA
AAA Studio - Under NDA
Comment un projet non annoncé a permis d'obtenir le délai d'attente le plus bas possible et d'améliorer l'équité dans son jeu 1v1.
Étude de cas

Jouez aux dieux avec la physique multiplayer
Squido Studio
Découvrez comment Squido utilise les serveurs de jeu optimisés par Edgegap pour offrir un gameplay VR époustouflant et chaotique.
Étude de cas

Des solutions entièrement gérées qui font gagner du temps à un jeu VR
Dirty Pearl Studios
Découvrez comment Dirty Pearl Studios a gagné du temps de développement grâce à l'intégration facile d'Edgegap et à l'orchestration automatisée de son intégration avec Nakama.
Étude de cas

Déploiement instantané de serveurs globaux pour l'éducation médicale en XR
AlensiaXR
Comment AlensiaXR utilise Edgegap pour offrir des sessions d'anatomie partagées à faible latence et toujours disponibles aux étudiants en médecine du monde entier.
Étude de cas

The Lightkeepers : un jeu coopératif social en VR avec des serveurs dédiés
Spectral Games
Comment Spectral Games a utilisé Edgegap Matchmaking et Server Browser pour lancer des serveurs dédiés pour son salon social VR, sans aucune expérience préalable des serveurs.
Étude de cas

Déploiements rapides & fiables dans le monde pour le PvPvE Gravebound
Crater Studios
Comment l'orchestration et le matchmaking d'Edgegap ont aidé Crater Studios à se concentrer sur le gameplay plutôt que sur l'infrastructure.
Étude de cas

Échelle rapide du métavers web
Hiber
Découvrez comment Hiber a éliminé les incertitudes de sa planification de capacité serveur avec Edgegap.
Étude de cas

Exigences matérielles élevées et pools de serveurs de jeux personnalisés
Alderon Games
Découvrez comment Alderon Games utilise instantanément une pool personnalisée de serveurs de jeux à travers plusieurs fournisseurs dans le monde pour son MMO populaire.
Étude de cas

Intégration facile pour les développeurs indépendants
WhaleFood Games
Découvrez comment WhaleFood Games a "chassé" ses problèmes de netcode avec Edgegap.
Étude de cas

Une technologie qui propulse le premier jeu eSports de l'Asie du Sud-Est.
Anantarupa Studios
Découvrez comment Edgegap a transformé le paysage du jeu en Asie du Sud-Est en démocratisant des infrastructures complexes avec sa solution.
Étude de cas

Une frappe. Portée mondiale.
Triple Hill Interactive
Comment Triple Hill Interactive tire parti de l'orchestration d'Edgegap pour offrir une faible latence et améliorer l'équité dans un genre où chaque milliseconde compte.
Étude de cas

Un Battle Royale en équipe au rythme effréné... avec des peluches d'animaux armées jusqu'aux dents !
SANDYFLOOR
Découvrez comment un studio indépendant basé en Corée a lancé son jeu multijoueur dans le monde entier.
Étude de cas

Les courses de chevaux sur mobile disponible mondialement grâce à Edgegap.
Mirai Labs
Comment Mirai Labs propulse les courses multijoueurs mondiales de Pegaxy Blaze grâce au déploiement de serveurs juste-à-temps et au vCPU fractionné pour maintenir un coût bas.
Étude de cas

Gestion et distribution des serveurs
Matrioshka Games
Lisez comment Matrioshka Games a réussi à expédier un Battle Royale en accès anticipé avec des ressources limitées.
Étude de cas

À mon signal, déchaînez l'enfer !
TyGames
Découvrez comment le studio indépendant TyGames immerge les joueurs dans un combat multijoueur de gladiateurs à la troisième personne.
Étude de cas

Orchestration Instantanée Mondiale
Soliton Interactive
Découvrez comment Soliton Interactive a réalisé l'impossible… Livrer son premier jeu jouable en mode multijoueur !
Étude de cas

Le jeu de hockey avec une physique côté serveur & une latence sous les 50ms
NS7
Découvrez pourquoi seul Edgegap pourrait permettre à un studio indépendant de réaliser sa vision d'un gameplay sportif F2P de qualité AAA grâce à la physique côté serveur et à l'autorité.
Étude de cas

Déploiements régionaux pour les jeux en ligne
X1 Contra 1
X1 Contra 1 propose des jeux PvP décontractés en temps réel à sa base de joueurs brésilienne grâce à un hébergement économique et à des déploiements régionaux
Étude de cas

Payez uniquement lorsque les joueurs jouent : une infrastructure abordable
Meltdown Interactive
Comment Edgegap a aidé le développeur indépendant Meltdown Interactive Media à résoudre la mise à l’échelle rentable et le matchmaking sans complexité
Étude de cas

Une plateforme Edgegap, trois profils réseau très différents
Warped Games
Comment Warped Games gère un hub social, du coopératif en temps réel et du coopératif au tour par tour, le tout sur la même API de déploiement Edgegap et le même pipeline de conteneurs.
Étude de cas

Pool Live Tour Max
RETA Games
Étude de cas

Le tireur d'extraction POP Web3 de Corée devient mondial, instantanément
NDUS Entertainment
Comment XOCIETY a facilement ajouté l'orchestration Edgegap et intégré un matchmaking personnalisé en travaillant aux côtés des Edgegap Ping Beacons pour optimiser la latence.
Étude de cas

Multijoueur dans chaque dimension
Arcadia.tv
Découvrez comment Arcadia.tv utilise le réseau edge d'Edgegap pour offrir un sport VR innovant basé sur l'équipe et la localisation.
Étude de cas

Un jeu mobile F2P réduit ses coûts d'infrastructure grâce aux serveurs JIT
Game Changers Worldwide
Comment Game Changer Worldwide a hébergé le PvP 3v3 en temps réel de Rumble Rush à l'échelle mondiale sur mobile.
Étude de cas
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.









