Découvrez comment fonctionne Edgegap

Découvrez comment fonctionne Edgegap

Nakama

Fish Game

Déployer sur Edgegap

Publié

Publié

Publié

Fish Game : Exécutez l'exemple Nakama d'Heroic Labs sur des serveurs dédiés Edgegap, dans Godot 4

Fish Game : Exécutez l'exemple Nakama d'Heroic Labs sur des serveurs dédiés Edgegap, dans Godot 4

Fish Game est le jeu de combat en ligne de 2 à 4 joueurs de Heroic Labs, conçu pour mettre en valeur Nakama. Le fork d'Edgegap le porte sur Godot 4 et exécute chaque match en ligne sur son propre serveur de jeu dédié.

Nakama continue de faire ce qu'il fait de mieux : les comptes, le matchmaking et le classement. Lorsqu'il trouve un match, il lance un serveur Edgegap à proximité des joueurs appariés grâce au Edgegap Fleet Manager pour Nakama.

Aucun joueur n'héberge la partie : un serveur Godot headless gère les touches, les éliminations, les manches et le vainqueur, puis enregistre la victoire dans Nakama et s'arrête de lui-même.

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

Plateformes : versions pour ordinateur Windows, macOS et Linux. Jeu original par Heroic Labs ; code sous licence Apache 2.0, la plupart des éléments graphiques, de la musique et des sons sous CC BY-NC.

Comment ça marche

  1. Les joueurs se connectent à Nakama avec leur adresse e-mail et appuient sur Match. Le système de matchmaking de Nakama les regroupe.

  2. Le Fleet Manager de Nakama lance un déploiement Edgegap à proximité des joueurs appariés, en utilisant l'adresse IP depuis laquelle chaque joueur s'est connecté.

  3. Le serveur de jeu démarre, écoute sur le port UDP 7777 et indique à Nakama qu'il est READY (prêt), avec son adresse IP et son port.

  4. Nakama envoie l'adresse du serveur à chaque joueur. Les joueurs se connectent via ENet ; le serveur vérifie la session Nakama de chacun et n'autorise que les joueurs appariés.

  5. Le premier poisson à remporter 5 manches gagne. Le serveur enregistre la victoire dans le classement fish_game_wins, puis demande à Nakama d'effectuer l'action STOP pour arrêter le déploiement.

Ce que le fork a changé :

Chemin

Description

autoload/OnlineMatch.gd

Client : ticket de matchmaking, notification de l'adresse du serveur, connexion ENet. Serveur : autorise l'accès aux joueurs appariés.

autoload/EdgegapServer.gd

Mode serveur dédié : écoute, signale READY, les connexions et STOP à Nakama, s'arrête de lui-même.

Main.gd, Game.gd, actors/Player.gd, components/Hitbox.gd

En ligne, le serveur contrôle les manches, les objets à ramasser, les touches et les éliminations.

nakama/

Nakama 3.39 avec un module Go : Fleet Manager, hook de matchmaking, classement faisant autorité.

server/Dockerfile

Exporte le préréglage « Linux Server » et l'exécute avec Godot en mode headless.

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.

Add Edgegap dedicated game servers to Heroic Labs’ Fish Game, using Nakama for matchmaking in Godot 4.

Fish Game de Nakama de Heroic Labs, fonctionnant sur Edgegap

Guide étape par étape

Exécuter l'exemple

1. Avant de commencer

  • Un compte Edgegap gratuit et un jeton d'API provenant de Tableau de bord → Paramètres utilisateur → Jetons. Il s'applique à l'ensemble de l'organisation, il ne va donc que dans le fichier de paramètres de Nakama, jamais dans le jeu.

  • Godot 4.7 (la version 4.3 ou ultérieure devrait fonctionner).

  • Docker Desktop, pour Nakama et l'image du serveur de jeu.

  • Une adresse HTTPS publique pour Nakama. Les serveurs Edgegap rappellent Nakama, donc localhost ne fonctionnera pas. Pour un test, un tunnel suffit (étape 3).

  • Clonez le fork.

2. Déployez le serveur de jeu sur Edgegap

Créez l'image à partir de la racine du dépôt et poussez-la vers votre registre Edgegap. La page Container Registry contient votre projet, votre nom d'utilisateur et votre jeton :

docker build --platform linux/amd64 -f server/Dockerfile -t registry.edgegap.com/<project>/fishgame-godot:1.0.0 .

docker push registry.edgegap.com/<project>/fishgame-godot:1.0.0

Dans le tableau de bord, créez l'application fishgame-godot et une version 1.0.0 :

  • Image <project>/fishgame-godot, tag 1.0.0, avec votre nom d'utilisateur et votre jeton de registre.

  • 0,5 vCPU et 512 Mo.

  • Un port : nom gameport, 7777, UDP.

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

Le serveur n'a besoin d'aucune variable d'environnement qui lui soit propre : le Fleet Manager lui transmet les adresses de rappel (callback) de Nakama à chaque déploiement.

3. Lancez Nakama

Copiez nakama/.env.example vers nakama/.env et renseignez-le :

  • EDGEGAP_API_TOKEN : votre jeton d'API Edgegap, avec son préfixe token.

  • EDGEGAP_APPLICATION, INITIAL_EDGEGAP_VERSION, EDGEGAP_PORT_NAME : l'application, la version et le nom du port de l'étape 2.

  • NAKAMA_ACCESS_URL : l'adresse HTTPS publique de Nakama.

  • NAKAMA_HTTP_KEY : une longue chaîne aléatoire.

Pour tester sur votre propre machine, un tunnel rapide Cloudflare attribue à Nakama une adresse publique. Mettez l'adresse https://….trycloudflare.com qu'il affiche dans NAKAMA_ACCESS_URL :

docker run -d --name fishgame-tunnel cloudflare/cloudflared:latest tunnel --no-autoupdate --url http://host.docker.internal:7350

Démarrez ensuite Nakama et Postgres :

docker compose -p fishgame -f nakama/docker-compose.yml up -d --build

4. Jouer un match

Pointez le jeu vers Nakama, soit dans les valeurs par défaut en haut de autoload/Online.gd, soit sur la ligne de commande :

godot --path . -- --nakama-host=your-tunnel.trycloudflare.com --nakama-port=443 --nakama-scheme=https

Les joueurs doivent également accéder à Nakama via son adresse publique : Edgegap utilise l'adresse IP à partir de laquelle chaque joueur se connecte pour placer le serveur près d'eux.

Lancez deux copies du jeu, choisissez En ligne, créez un compte dans chacune, et appuyez sur Match dans les deux. Après « Match found! Starting a game server... », les deux arrivent sur l'écran d'attente du même serveur Edgegap. Le premier poisson à remporter 5 manches gagne et obtient +1 au classement. Ensuite, le déploiement s'arrête de lui-même.

5. Ajoutez-le à votre propre jeu Godot et Nakama

Le fork est une référence fonctionnelle : votre agent de codage peut copier ses fichiers testés au lieu de les écrire à partir de zéro. Quatre modifications permettent à un jeu Godot de s'exécuter sur Edgegap avec Nakama :

  1. Nakama démarre les serveurs. Ajoutez l'Edgegap Fleet Manager pour Nakama à votre module Go Nakama, ainsi qu'un hook de matchmaker qui crée un déploiement Edgegap pour chaque match (le dossier nakama/ du fork).

  2. Le jeu s'exécute en mode headless en tant que serveur. Lorsque Godot s'exécute en mode headless, le jeu démarre en mode serveur, écoute sur un port UDP fixe et gère les règles du jeu : touches, morts, manches, résultats (autoload/EdgegapServer.gd, Game.gd).

  3. Le serveur communique avec Nakama. Il envoie READY avec son IP et son port, les joueurs connectés toutes les 5 secondes, et STOP lorsque le match se termine, afin que Nakama mette fin au déploiement et que la facturation s'arrête.

  4. Le client attend son serveur. Après le matchmaking, le client reçoit l'adresse du serveur dans une notification Nakama, se connecte via ENet, et le serveur vérifie sa session Nakama avant de le laisser entrer (autoload/OnlineMatch.gd).

Ensuite, conteneurisez le serveur avec le server/Dockerfile du fork comme modèle, puis créez la version de l'application comme à l'étape 2.

Avec votre agent :

« Chargez la compétence edgegap, puis edgegap-nakama et edgegap-godot. En utilisant github.com/edgegap/backend-game-sample-godot-nakama-fishgame comme référence, ajoutez l'Edgegap Fleet Manager à mon module Nakama, un mode serveur headless à mon jeu Godot qui signale READY, les connexions et STOP à Nakama, ainsi qu'un client qui se connecte à l'adresse envoyée par Nakama après le matchmaking. »

Pour le détail de chaque étape, manuellement, consultez le guide d'intégration de Nakama.

6. Comment Nakama associe les joueurs et arrête les serveurs

Le système de matchmaking de Nakama regroupe les joueurs, et son plugin Fleet Manager démarre le serveur Edgegap et indique à chaque joueur où se connecter. Vous n'avez pas besoin du système de matchmaking d'Edgegap pour cet exemple.

Le serveur demande à Nakama d'arrêter son déploiement, ce qui met fin à la facturation :

  • lorsque la partie est gagnée, après avoir enregistré la victoire ;

  • lorsqu'il reste moins de 2 joueurs en cours de partie ;

  • lorsque tout le monde quitte ;

  • lorsque personne ne rejoint dans les 60 secondes ;

  • après 20 minutes.

Pour ajouter la même configuration à votre propre jeu Nakama, suivez le guide d'intégration de Nakama.

Limites connues

  • Pas de jeu en ligne dans le navigateur. ENet utilise UDP, que les navigateurs ne peuvent pas ouvrir. Une version web nécessiterait le pair WebSocket de Godot et un port WS avec mise à niveau TLS.

  • Le déplacement est toujours géré par le client. Le serveur décide des coups, des morts, des objets ramassés, des manches et des victoires, mais chaque joueur envoie la position de son propre poisson, comme dans l'original. Pour un jeu compétitif, déplacez la gestion des mouvements vers le serveur avec prédiction côté client.

  • Pas de parties privées par identifiant. Chaque match provient du système de matchmaking. Les appels instance_create et instance_join du Fleet Manager pourraient permettre de les réintégrer.

Ce qui a été testé

Testé de bout en bout sur Edgegap le 20 octobre 2026. Le fork inclut 3 tests dans tests/ :

  • Jeu local : godot --path . --script res://tests/smoke_test.gd charge la carte ; les poissons atterrissent, sont ramassés, balancés et lancés sans erreur.

  • Réseau, serveur local : godot --headless --path . -- --test-auto-hit, puis lancez deux fois le client de test réseau (commande dans EDGEGAP.md).

  • De bout en bout sur Edgegap : définissez FISHGAME_TEST_AUTO_HIT=true dans nakama/.env, puis lancez deux fois le client de test réseau vers votre Nakama. Le serveur frappe un poisson par manche, de sorte que les parties se terminent d'elles-mêmes. Laissez cette option désactivée pour les vraies parties.

Pour travailler sur le netcode sans Nakama ni Edgegap : godot --headless --path . démarre un serveur, et godot --path . -- --connect=127.0.0.1:7777 y connecte un client.

Questions Fréquemment Posées

Questions concernant l'exécution de Fish Game avec Nakama et Edgegap.

Nakama peut-il démarrer des serveurs de jeu dédiés ?

Oui. Avec Edgegap Fleet Manager pour Nakama, le système de matchmaking de Nakama démarre un serveur Edgegap à proximité des joueurs associés et leur envoie son adresse. Le serveur fait un rapport à Nakama et s'arrête lorsque le match se termine.

Comment créer un jeu Godot avec une architecture faisant autorité côté serveur à l'aide de Nakama ?

Exécutez un serveur Godot sans tête (headless) par match qui gère les touches, les morts, les manches et les résultats, et laissez Nakama gérer les comptes, le matchmaking et les classements. Fish Game fonctionne ainsi : les joueurs ne peuvent pas publier eux-mêmes leurs victoires.

Fish Game fonctionne-t-il sous Godot 4 ?

Oui. Le fork d'Edgegap porte le jeu original Godot 3 d'Heroic Labs sur Godot 4.7, et la version 4.3 ou ultérieure devrait fonctionner. La version originale hébergée en peer-to-peer reste sur le GitHub d'Heroic Labs.

L'export web du jeu Fish Game permet-il de jouer en ligne ?

Pas encore. Le jeu utilise ENet sur UDP, ce que les navigateurs ne peuvent pas ouvrir. Une version web nécessiterait le peer WebSocket de Godot et un port WebSocket avec mise à niveau TLS sur Edgegap.

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.