Découvrez comment fonctionne Edgegap

Découvrez comment fonctionne Edgegap

/

/

SpaceEdge (WebGL)

Fish-Networking

SpaceEdge (WebGL)

Déployer sur Edgegap

Publié

Publié

Publié

SpaceEdge (WebGL) : Exécutez le jeu de tir spatial FishNet d'Edgegap sur des serveurs dédiés Edgegap, avec Matchmaking

SpaceEdge (WebGL) : Exécutez le jeu de tir spatial FishNet d'Edgegap sur des serveurs dédiés Edgegap, avec Matchmaking

SpaceEdge est l'exemple de jeu de tir spatial d'Edgegap pour Fish-Networking (FishNet), conçu sous Unity. Cette version s'exécute dans le navigateur : les joueurs pilotent, tirent et marquent des points dans Unity WebGL, et chaque partie tourne sur son propre serveur de jeu dédié Edgegap.

Le code du jeu reste du FishNet : le même NetworkManager, le transport Bayou, la prédiction et les RPC. L'exemple ajoute quelques scripts Edgegap autour : un pour démarrer le serveur, un pour trouver une partie et un pour les maintenir actifs d'une scène à l'autre.

Aucun joueur n'héberge la partie. Le serveur dédié vérifie chaque tir, gère la santé et le score, et arrête son propre déploiement lorsque tout le monde a quitté. Le client de jeu ne détient aucun jeton d'API Edgegap.

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

Plateformes : Unity WebGL dans le navigateur, via des WebSockets sécurisés (wss://) ; serveur dédié Linux. Le fichier README indique que les builds de bureau Windows fonctionnent également via Bayou (non inclus dans le test). Unity 2021.3.45f2, FishNet 4.1.6R. Utilise des ressources gratuites de l'Unity Asset Store (Cartoon FX, Sci-Fi Sfx, Star Sparrow, Starfield Skybox, TotalJSON) sous leurs licences respectives.

Comment ça fonctionne

  1. Un joueur ouvre le jeu dans le navigateur et sélectionne Start Game.

  2. Mode direct (par défaut) : le client se connecte à l'adresse et au port du serveur configurés sur MatchmakingSystem. Mode Matchmaker (optionnel) : le client envoie un ticket au Matchmaker Edgegap, qui regroupe 2 à 4 joueurs et démarre un serveur Edgegap à proximité d'eux.

  3. Le serveur démarre FishNet sur 0.0.0.0:7770 via des WebSockets standards. La fonctionnalité TLS Upgrade d'Edgegap ajoute la couche sécurisée, permettant aux navigateurs de se connecter avec wss:// au nom d'hôte du déploiement. Aucun certificat à acheter.

  4. Les joueurs pilotent et tirent dans BattleScene. Le serveur vérifie chaque tir et gère la santé ainsi que le score.

  5. Si personne ne rejoint dans les 120 secondes, ou 30 secondes après le départ du dernier joueur, le serveur arrête son propre déploiement, et la facturation prend fin.

Ce que l'exemple a modifié :

Chemin

Rôle

Assets/SpaceEdge/Scripts/Systems/MatchmakingSystem.cs

Associe Start Game à une connexion directe (par défaut) ou au client de matchmaking. Lorsque le matchmaker est désactivé, il désactive le client de matchmaking.

Assets/Edgegap/EdgegapMatchmakingClient.cs

Mode Matchmaker : crée un ticket, attend le statut HOST_ASSIGNED, puis se connecte avec wss://{fqdn}:{port externe}. Les balises de latence sont désactivées en WebGL.

Assets/Edgegap/EdgegapServerLifecycle.cs

Builds serveur : démarre le serveur FishNet sur le port 7770, lit les variables injectées par Edgegap et arrête le déploiement lorsqu'il est vide. Remplace Start On Headless de FishNet.

Assets/Edgegap/EdgegapPersistence.cs

Maintient l'objet Edgegap actif à travers MainMenu → BattleScene → MainMenu.

Assets/Edgegap/Editor/

Builds client et serveur Linux en ligne de commande, plus configuration des scènes.

Packages/manifest.json

Le SDK Edgegap pour Unity en tant que paquet Git (main), et non comme copie intégrée.

Dockerfile, matchmaker-config.json

Image serveur sur Ubuntu 22.04 avec certificats CA ; profil de matchmaker pour les navigateurs.

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.

Two spaceships flying over a glowing hexagon grid in FishNet's SpaceEdge sample, built for WebGL.

SpaceEdge dans le navigateur : chaque vaisseau vole sur le même serveur dédié Edgegap.

Guide étape par étape

Exécuter l'exemple

1. Avant de commencer

  • Un compte Edgegap gratuit. Vérifiez votre adresse e-mail. Aucune carte de crédit n'est requise pour tester.

  • Unity 2021.3.45f2 avec les modules Linux Build Support (Mono), Linux Dedicated Server Build Support et WebGL Build Support.

  • Docker Desktop, installé et en cours d'exécution.

  • Python 3, ou tout autre serveur web statique, pour héberger le build WebGL localement.

  • Clonez le dépôt avec git clone, puis ouvrez le dossier Fishnet_v4.1.6R_WebGL_Matchmaker dans Unity Hub. Les autres dossiers sont des exemples plus anciens ; certains intègrent un jeton d'API Edgegap dans le client de jeu, utilisez-les donc uniquement pour des tests locaux.

Git : Unity nécessite un client Git (2.14.0 ou plus récent) dans votre PATH pour installer des packages à partir d'une URL Git, comme le plugin Edgegap. macOS en possède généralement déjà un (Xcode Command Line Tools) ; sur Windows, installez Git.

2. Jouer en local

Créez le serveur avec Tools → Edgegap → Build Linux Dedicated Server. La build est générée dans Builds/EdgegapServer/. Exécutez-la ensuite dans Docker, depuis le dossier du projet d'exemple :

docker build --platform linux/amd64 -t fishnet-server:local .

docker run --rm -p 7770:7770 fishnet-server:local

Le journal indique Edgegap Server | Starting server on 0.0.0.0:7770. et Not running on Edgegap, self-stop disabled.

Créez le client WebGL depuis File → Build Settings, ou en ligne de commande :

Unity -batchmode -quit -projectPath . -executeMethod EdgegapServerBuild.BuildClient -edgegapClientTarget webgl

Hébergez Builds/Client/webgl, par exemple avec python -m http.server 8080, ouvrez http://localhost:8080 dans deux onglets et sélectionnez Start Game dans chacun. Les valeurs par défaut (localhost, 7770, Direct Use Wss désactivé) permettent de se connecter au serveur local.

3. Mettez le serveur de jeu sur Edgegap

Poussez l'image vers votre registre Edgegap. La page Registre de conteneurs contient votre projet, votre nom d'utilisateur et votre jeton :

docker login registry.edgegap.com

docker build --platform linux/amd64 -t registry.edgegap.com/<project>/fishnet-server:v1 .

docker push registry.edgegap.com/<project>/fishnet-server:v1

Dans le tableau de bord, créez une application (la configuration du matchmaker de l'exemple attend fishnet-webgl-matchmaker) et une version v1 pour cette image :

  • Port : nom gameport, port 7770, protocole WS, Mise à niveau TLS activée. Edgegap gère TLS, donc les navigateurs se connectent avec wss:// tandis que le serveur communique en ws brut.

  • Nom d'utilisateur et jeton du registre de conteneurs définis, sinon les déploiements ne parviendront pas à récupérer l'image.

Utilisez une nouvelle balise d'image pour chaque build, jamais latest.

4. Jouer sur un serveur Edgegap

Déployez la version depuis le tableau de bord, près de chez vous. Lorsqu'elle est Ready :

  1. Sur l'objet MatchmakingSystem dans la scène MainMenu, définissez Direct Address sur le nom d'hôte du déploiement (<id>.pr.edgegap.net, et non son adresse IP), Direct Port sur son port externe, et cochez Direct Use Wss.

  2. Recompilez le client WebGL, hébergez-le et jouez dans deux onglets.

Le port externe change à chaque déploiement, lisez-le donc à chaque fois. Le serveur arrête son déploiement 120 secondes après son démarrage si personne ne le rejoint, et 30 secondes après le départ du dernier joueur.

5. Ajoutez-le à votre propre jeu FishNet

L'exemple sert de référence fonctionnelle : votre agent de programmation peut copier ses fichiers testés au lieu de les écrire de zéro. Quatre modifications permettent d'exécuter un jeu de navigateur FishNet sur Edgegap :

  1. Le serveur démarre de lui-même. Assets/Edgegap/EdgegapServerLifecycle.cs démarre FishNet sur un port fixe dans les builds de serveur. Désactivez Start On Headless sur ServerManager, afin que la même scène fonctionne pour les builds client et serveur.

  2. Le serveur s'arrête de lui-même. Le même script lit les variables injectées par Edgegap et arrête le déploiement lorsqu'il est vide, ce qui interrompt la facturation.

  3. Il survit aux changements de scène. Assets/Edgegap/EdgegapPersistence.cs maintient l'objet Edgegap actif à travers les chargements de scène FishNet. Sans cela, l'arrêt automatique du serveur disparaît avec la scène de menu.

  4. Les navigateurs se connectent en toute sécurité. Bayou sur 7770, un port WS avec TLS Upgrade sur la version de l'application, et des clients qui se connectent avec wss:// au nom d'hôte (MatchmakingSystem.cs, EdgegapMatchmakingClient.cs).

Ensuite, conteneurisez le serveur en utilisant le Dockerfile de l'exemple comme modèle, puis créez la version de l'application comme à l'étape 3.

Avec votre agent :

« Charge la compétence edgegap, puis edgegap-fishnet. En utilisant github.com/edgegap/netcode-game-sample-unity-fishnet-hashgrid/tree/main/Fishnet_v4.1.6R_WebGL_Matchmaker comme référence, fais de mon jeu FishNet un jeu WebGL avec serveur dédié : Bayou sur 7770, le cycle de vie du serveur Edgegap, les scripts de persistance et de client de matchmaking, Start On Headless désactivé, wss vers le nom d'hôte sur le client, et une configuration de matchmaker sans règle de latence et avec mes origines web dans allowed_cors_origins. »

Pour chaque étape en détail, manuellement, consultez le guide d'intégration Fish-Networking. Pour les règles de navigateur applicables à tout netcode Unity, consultez Unity WebGL.

6. Activez le Matchmaker Edgegap

Le matchmaker regroupe les joueurs, démarre un serveur Edgegap à proximité d'eux et fournit son adresse à chaque client. Dans l'échantillon, il est désactivé jusqu'à ce que vous le cochiez.

  1. Dans matchmaker-config.json, définissez application.name et version avec votre application et votre version, puis répertoriez chaque adresse web qui dessert votre build WebGL dans allowed_cors_origins (le fichier contient http://localhost:8080).

  2. Dans le tableau de bord, ouvrez Matchmaker, sélectionnez Create Matchmaker, téléversez le fichier et sélectionnez Create and Start.

  3. Dans MainMenu, copiez l'API URL et l'Auth Token dans Base Url et Auth Token sur le Edgegap Matchmaking Client de l'objet Edgegap. Le jeton d'authentification peut être intégré en toute sécurité dans le client. Cochez Use Edgegap Matchmaker sur MatchmakingSystem.

  4. Recompilez le client, diffusez-le à partir d'une origine autorisée, ouvrez deux onglets et sélectionnez Start Game dans les deux.

Deux règles pour les jeux par navigateur, déjà présentes dans la configuration de l'échantillon :

  • Aucune règle de latence. Les navigateurs ne peuvent pas envoyer de requêtes ping aux balises de latence d'Edgegap, Edgegap localise donc le serveur à partir des adresses IP des joueurs.

  • Indiquez vos origines. Si elles ne figurent pas dans allowed_cors_origins, le navigateur bloque les réponses du matchmaker.

Le profil casual associe 2 à 4 joueurs. Lorsque vous publiez un nouveau build de serveur, envoyez un nouveau tag, créez une nouvelle version de l'application, puis, dans le matchmaker, effectuez Stop → Edit application.version → Start.

Limites connues

  • Testez avec deux joueurs. Le profil s'étend à 1 joueur après 30 secondes, mais lors des tests d'Edgegap, un joueur seul n'obtenait un serveur que lorsque le ticket approchait de son expiration de 5 minutes.

  • Niveau gratuit. Le matchmaker redémarre toutes les 3 heures (l'URL et le jeton restent les mêmes), et un seul déploiement s'exécute à la fois. Un déploiement de test oublié bloque le matchmaking.

  • Aucune vérification de ticket sur le serveur pour le moment. Le serveur ne vérifie pas si un client qui se connecte détient l'un des tickets du match (MM_TICKET_IDS), et il n'y a pas de remplissage ultérieur (backfill). Ces deux points sont les prochaines étapes pour un véritable jeu.

  • Le mode direct est manuel. Sans le matchmaker, vous devez copier le nom d'hôte et le port de chaque déploiement dans le client, puis recompiler.

Ce qui a été testé

Testé de bout en bout sur Edgegap le 15 octobre 2026, avec Unity 2021.3.45f2, FishNet 4.1.6R, Bayou, le SDK Edgegap Unity 3.5.5 avec le correctif POST intégré dans la version 3.5.6, et le matchmaker 3.3.2 sur l'offre gratuite :

  • Matchmaker : deux onglets WebGL ont été mis en correspondance, ont obtenu le même serveur, se sont connectés via wss:// avec mise à niveau TLS, et ont joué.

  • Arrêt automatique : après le match, le serveur a interrompu son propre déploiement.

  • Local : le serveur Docker enregistre Starting server on 0.0.0.0:7770. et accepte les clients WebGL sur localhost.

Le 21 octobre 2026, l'exemple a été déplacé vers la branche main du SDK (3.5.6 ou ultérieure), qui intègre le même correctif. Clients de bureau via Bayou : devrait fonctionner, ne faisait pas partie de l'exécution testée.

Questions Fréquemment Posées

Questions sur l'exécution de l'exemple SpaceEdge de FishNet dans le navigateur sur Edgegap.

Un jeu FishNet WebGL peut-il se connecter à un serveur dédié ?

Oui, avec le transport WebSocket Bayou. Le serveur exécute des WebSockets standards sur le port 7770, la mise à niveau TLS d'Edgegap ajoute la couche sécurisée, et le navigateur se connecte avec wss:// au nom d'hôte du déploiement. C'est exactement ce que fait SpaceEdge.

Ai-je besoin d'Edgegap Matchmaker pour jouer à SpaceEdge en ligne ?

Non. Par défaut, l'échantillon se connecte directement à une adresse de serveur et à un port que vous définissez, vous permettant ainsi de tester par rapport à un déploiement que vous lancez depuis le tableau de bord. Cochez Use Edgegap Matchmaker pour que les joueurs soient regroupés et connectés automatiquement.

Le client SpaceEdge détient-il un jeton d'API Edgegap ?

Non. En mode matchmaker, il utilise uniquement le jeton d'authentification du matchmaker, qui peut être intégré aux clients en toute sécurité. Les anciens dossiers du même référentiel appellent l'API Edgegap depuis le client, utilisez-les donc uniquement pour des tests locaux.

Pourquoi le système de matchmaking échoue-t-il sur Unity 2021.3 ?

Avant Unity 2022.3, Edgegap Unity SDK 3.5.5 et les versions antérieures envoient un JSON de ticket que le matchmaker rejette avec une erreur HTTP 400. Utilisez le SDK 3.5.6 ou une version ultérieure ; l'échantillon suit la branche principale du SDK.

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.

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.