Framework de serveur de jeu ioGame 17.1.54 nginx proxy webSocket pour obtenir une véritable adresse IP

mise à jour majeure

[ #174 ] Correction du problème selon lequel lorsque l'action est transmise à la gestion des conteneurs, elle est instanciée deux fois

Obtenez les données et l'extension du serveur externe du jeu , et obtenez le ResponseCollectExternalMessage. Ajoutez la méthode optionalAnySuccess pour faciliter la réussite de l'option facultative

     public  String  getUserIp () { 
 ​ResponseCollectExternalMessage 
 message = ... ​return message                 .optionalAnySuccess () // obtenir la valeur de retour                 .map ( ResponseCollectExternalItemMessage :: getData ) // sera String                 .map ( Objects :: toString ) // if not Si une chaîne vide est obtenue, l'appelant n'a pas besoin de faire un jugement nul.                 .ouSinon ( "" ) ;     }          
 
          
 
                 
 
                 
 
                 
 
 

 

Module de demande client de test et de simulation de pression , ajouter l'identification du nom du module

 public  class  BagInputCommandRegion  étend  AbstractInputCommandRegion { 
 @Override public void initInputCommand () { this . inputCommandCreate . cmd = BagCmd . cmde ; cela . inputCommandCreate . cmdName = "背包模块" ;     } }    
       
           
           
 
 

 

Ajout de HttpRealIpHandler au serveur externe du nouveau jeu , qui est utilisé pour obtenir le support IP réel du joueur

Le jeu utilise le proxy nginx pour le serveur externe webSocket, qui peut également obtenir l'ip réelle du joueur

 

La partie relativement conviviale du framework est que si vous utilisez le proxy nginx, l'adresse IP du joueur sera résolue via HttpRealIpHandler, sinon l'adresse IP du canal netty sera utilisée. En termes simples, vous pouvez toujours obtenir une adresse IP de joueur

 public  class  MyExternalServer { 
     ... ... omettant une partie du code 
 public ExternalServer createExternalServer ( int externalPort ) {         ... ... omettant une partie du code // Jeu External Server - Builder DefaultExternalServerBuilder builder = ... ​builder . paramètre () .setMicroBootstrapFlow ( nouveau WebSocketMicroBootstrapFlow () { @Override protected void httpHandler ( contexte PipelineContext ) { super .       
 
         
           
 
          
             
                
                 httpHandler ( context ); 
 /* * HttpRealIpHandler est un gestionnaire intégré au framework. * Après l'avoir ajouté , vous pouvez obtenir l'adresse IP réelle du joueur même si elle est transmise via nginx */ context .addLast ( "HttpRealIpHandler" , new HttpRealIpHandler ());             }         }); ​// Construisez le serveur externe du jeu https ://www .yuque.com/iohao/game/ea6geg return builder .build ( );     } }                
                  
                  
                  
                  
 
 
 
         
          
 
 

 

 

Statistiques sur les tendances d'utilisation d'ioGame

Le nombre de développeurs de serveurs de jeux qui prêtent attention à ioGame continue d'augmenter, statistiques de 2022-09 ~ 2023-08 ; 

Les informations statistiques ici concernent les développeurs qui prêtent attention au framework ioGame. On peut voir à partir des données statistiques qu'ioGame a attiré l'attention de nombreux développeurs en raison de ses avantages tels que des fonctions faciles à utiliser et puissantes. Si vous voulez savoir si quelqu'un utilise ioGame, vous pouvez aller ici pour lire les statistiques, les avis des développeurs et les discussions.

https://www.yuque.com/iohao/game/gpxk93#TwVa8

Les données statistiques mensuelles sont présentées ici. Les données statistiques proviennent de l'arrière-plan de Yuque. Ces données sont réelles, objectives et en direct .

En raison du coût, aucun commerçant ne peut fournir ce type de service à Mobao Mooduo, ces statistiques sont donc plus authentiques.

Grâce aux statistiques, nous pouvons voir que de nombreux développeurs visitent chaque jour les documents en ligne d'ioGame, et ces statistiques ne sont pas dérivées de Kouhe, ni créées subjectivement.

Par conséquent, les développeurs qui hésitent encore à utiliser ioGame devraient discuter de "pourquoi ces développeurs choisissent d'utiliser ioGame", plutôt que de savoir si quelqu'un utilise ioGame.

Cliquez sur moi pour voir les données d'ioGame en arrière-plan de Yuque

assistant maven

ioGame a été téléchargé dans l'entrepôt central. Si le dernier code source du framework ne peut pas être téléchargé, il est recommandé que le proxy d'entrepôt maven du développeur utilise le proxy natif ou Tencent Cloud. Le proxy d'Alibaba Cloud n'est actuellement pas recommandé. Pour les paramètres de proxy Tencent Cloud, veuillez vous référer ici .

Vérifiez la dernière version d'ioGame sur  https://www.yuque.com/iohao/game/ab15oe

ioGame est un framework de serveur de jeu en ligne léger. ioGame n'a pas de dépendances fortes sur le middleware, c'est-à-dire qu'il n'est pas nécessaire d'installer d'autres produits middleware ; pour le moment, vous n'avez besoin que d'une seule dépendance pour obtenir le framework complet, et en même temps le temps supporte toutes les caractéristiques fonctionnelles.

<dependency>
    <groupId>com.iohao.game</groupId>
    <artifactId>run-one-netty</artifactId>
    <version>${ioGame.version}</version>
</dependency>

Carte d'aperçu globale du cadre

 


Introduction au framework de serveur de jeu en réseau ioGame

  • Conception d'architecture asynchrone, pilotée par les événements, sans verrouillage ; légère, sans s'appuyer sur un middleware ou une base de données tiers pour prendre en charge le clustering, distribué
  • Grâce à ioGame, il est facile de créer un serveur de jeu étape par étape sans nœud central dans le cluster, l'automatisation du cluster et le multi-processus.
  • Petit paquet, démarrage rapide, moins d'utilisation de la mémoire, plus économique, pas besoin de fichiers de configuration et offre un contrôle d'accès au routage élégant
  • Laissez les développeurs utiliser un ensemble de code métier sans modification et prenez en charge plusieurs méthodes de connexion : WebSocket, TCP, UDP
  • Laissez les développeurs utiliser un ensemble de codes métier pour basculer et étendre facilement différents protocoles de communication : Protobuf, JSON
  • Performances quasi natives ; le cadre métier peut exécuter en moyenne 11,52 millions de fois la logique métier par seconde dans un seul thread
  • Le code est un document de débogage conjoint, vérification JSR380, assertion + mécanisme d'exception = moins de coûts de maintenance
  • Le framework a une affinité intelligente avec le même processus ; pendant le développement, le code métier peut être localisé et sauté
  • Souplesse et diversité de déploiement d'architecture : à la fois indépendant et intégré
  • Peut communiquer avec plusieurs serveurs de logique de jeu du même type en même temps et obtenir des données
  • Les serveurs logiques peuvent communiquer entre eux à travers les processus et les machines
  • Aidez les joueurs à lier dynamiquement le serveur de logique de jeu
  • Compatible avec tout autre framework
  • Convivial pour les développeurs webMVC
  • Pas de ressort forte dépendance
  • Aucun coût d'apprentissage

 

Voulez-vous développer un jeu en ligne étape par étape avec des performances élevées, une stabilité, une facilité d'utilisation, un équilibrage de charge intégré, évitant la conception d'explosion de classe, une communication inter-processus entre machines, un cluster sans nœud central, une automatisation de cluster, et multi-processus avec état Qu'en est-il du serveur ? Si oui, je vous recommande ici un framework de serveur de jeux en ligne ioGame écrit en langage java. Ce qui suit donnera une brève introduction au cadre sous divers aspects.

ioGame est un framework de serveur de jeux en ligne Java avec les fonctionnalités suivantes :

  • Conception d'architecture asynchrone et événementielle sans verrouillage
  • Prend en charge les protocoles de communication websocket et socket two
  • Prend en charge différents protocoles de communication tels que protobuf et json
  • Cluster sans nœud central, automatisation du cluster, conception distribuée
  • Vraiment léger, il peut prendre en charge les clusters et distribués sans s'appuyer sur un middleware ou une base de données tiers
  • Fournir plusieurs méthodes de communication et les serveurs logiques peuvent communiquer entre eux sur plusieurs machines
  • Intégration facile avec Spring et d'autres frameworks
  • Faible coût d'apprentissage et bonne expérience de développement
  • Prend en charge les méthodes de démarrage et de déploiement multi-serveurs à processus unique, multi-serveurs et multi-processus
  • Fournit des fonctionnalités d'accessibilité pour la génération de documentation de jeu
  • Petite taille de paquet, démarrage rapide et faible utilisation de la mémoire
  • Fournir un contrôle d'accès au routage élégant
  • Fournit une extension et des paramètres de filetage flexibles
  • Affinité intelligente du même processus

ioGame est un framework léger spécialement conçu pour les serveurs de jeux en ligne , qui peut vous aider à créer et à exécuter rapidement vos propres serveurs de jeux. Il convient aux jeux en ligne de tous types et de toutes tailles, qu'il s'agisse de H5, de jeux mobiles ou de jeux PC, qu'il s'agisse d'une simple salle de discussion ou d'un serveur global complexe, de jeux au tour par tour, de jeux de stratégie, de jeux occasionnels inactifs, de jeux réels time battles, MMORPG, etc., ioGame peut répondre à vos besoins.

ioGame est également excellent en termes d'emballage, d'utilisation de la mémoire et de vitesse de démarrage. Une fois que le package jar est d'environ  15 Mo , l'application  démarre généralement en 0.x secondes et l'empreinte mémoire est faible. Pour plus de détails, veuillez consulter  l'exemple complet d'écriture rapide d'un serveur à partir de zéro .

En termes d'intégration écologique, ioGame s'intègre facilement avec spring (5 lignes de code) ; en plus de spring, il peut aussi s'intégrer avec n'importe quel autre framework , tel que : solon  ...etc., de manière à utiliser le l'écologie pertinente d'autres cadres.

En termes de légèreté, ioGame  peut prendre en charge le clustering et la distribution sans s'appuyer sur un middleware ou une base de données tiers , et n'a besoin que d'un environnement Java pour fonctionner. Cela signifie qu'il est facile à utiliser et qu'il réduit également les coûts de déploiement et les difficultés de maintenance pour les entreprises en termes de déploiement. Lorsque vous utilisez ioGame, vous n'avez besoin que d'une seule dépendance pour obtenir l'ensemble du framework sans installer d'autres services, tels que : Nginx, Redis, MQ, Mysql, ZooKeeper, outil de compilation du protocole Protobuf...etc.

En termes de méthodes de communication, la plupart des frameworks ne peuvent prendre en charge que les méthodes de communication push (diffusion); tandis que ioGame fournit 5 types de méthodes de communication, à savoir le traitement de requête unique, le push et la communication mutuelle entre un seul serveur logique, Communiquer avec plusieurs serveurs logiques du même type, et communiquent par impulsions . Grâce à l'utilisation combinée de diverses méthodes de communication, le travail qui était difficile à terminer dans le passé peut être facilement terminé, et ces méthodes de communication prennent en charge la communication entre processus et entre machines.

En termes de méthodes de connexion, ioGame permet aux développeurs d'utiliser un ensemble de codes métier tout en prenant en charge plusieurs méthodes de connexion sans aucune modification. ioGame prend déjà en charge les méthodes de connexion TCP, WebSocket et UDP, et prend également en charge la commutation flexible entre ces méthodes de connexion. La méthode de connexion est évolutive et l'opération d'extension est également très simple, ce qui signifie que si KCP est pris en charge ultérieurement, que votre projet actuel utilise TCP, WebSocket ou UDP, vous pouvez passer à KCP ; notez que même si vous passez à KCP La méthode de connexion n'a pas besoin de modifier le code d'entreprise existant.

En termes de protocoles de communication, ioGame permet aux développeurs de basculer et d'étendre facilement différents protocoles de communication , tels que Protobuf et JSON, avec un ensemble de codes métier . Passez de Protobuf à JSON avec une seule ligne de code, sans changer les méthodes commerciales.

En termes de clusters, ioGame's Broker (passerelle de jeu) adopte une conception de cluster automatisée sans nœud central, tous les nœuds sont égaux et autonomes, et il n'y a pas de point de défaillance unique. Le cluster peut être automatiquement géré et mis à l'échelle de manière élastique Lorsqu'un nœud rejoint ou quitte, il peut automatiquement assurer l'équilibrage de charge et la cohérence des données sans affecter la disponibilité du service.

En termes de distribution, le serveur logique d'ioGame utilise une idée de conception distribuée, divisant le serveur en différents niveaux tels que le serveur externe de jeu et le serveur logique de jeu, et chaque couche a des responsabilités et des interfaces claires. Cela améliore la lisibilité et la maintenabilité du code, et facilite l'expansion horizontale .

En termes de coût d'apprentissage, le coût d'apprentissage d'ioGame est très faible, on peut dire qu'il s'agit d'un coût d'apprentissage nul , même si vous n'avez aucune expérience en programmation de jeux, vous pouvez facilement vous lancer. Les développeurs n'ont besoin que de maîtriser les méthodes Java ordinaires ou les connaissances liées au webMVC, puis ils peuvent utiliser le framework pour développer des services. Le framework n'oblige pas les développeurs à changer leurs habitudes de codage, mais s'adapte aux besoins des développeurs.

En termes d' affinité avec le même processus , dans le même processus, la communication entre différentes instances de Netty est transmise via la mémoire, sans transmission réseau, et la vitesse de transmission des données est extrêmement rapide. L'affinité de même processus signifie que l'accès au serveur de logique de jeu dans le même processus est prioritaire. Lorsqu'il n'y a pas de serveur de logique de jeu dans le même processus qui peut gérer la demande, il ira vers d'autres processus ou machines pour trouver la logique du jeu. serveur qui peut gérer la requête ; Pour faire simple, le framework est très intelligent dans le traitement des requêtes, et donnera la priorité au serveur logique dans le même processus pour la consommation.

En termes d'expérience de développement, ioGame accorde une grande attention à l'expérience de développement du développeur ; le framework fournit de nombreuses fonctions riches telles que la vérification JSR380, le mécanisme d'assertion + exception, le positionnement du code métier, etc. , rendant le code métier du développeur plus clair et concis ;

En termes de concurrence commerciale, le framework résout le problème de simultanéité d'un seul joueur pour les développeurs, et fournit également une solution au problème de simultanéité de plusieurs joueurs dans la même salle ou entreprise ; le framework fournit un support convivial pour l'évolutivité des threads, et non seulement peut fournir des paramètres de numéro de fil rigide ; veuillez vous référer au  fil ioGame lié pour plus de détails .

En termes d'expérience de développement distribué, il est généralement nécessaire de démarrer plusieurs processus lors du développement d'applications distribuées. Cela rendra le débogage et le dépannage très difficiles, réduisant ainsi l'efficacité des développeurs et augmentant la charge de travail. C'est un problème que de nombreux frameworks ne peuvent pas résoudre , mais ioGame l'a fait ! ioGame prend en charge le démarrage à processus unique multi-serveurs, ce qui permet aux développeurs de développer et de déboguer plus facilement des systèmes étape par étape.

En termes d'amarrage et de débogage conjoint avec le frontal, ioGame fournit une fonction auxiliaire pour générer des fichiers de jeu , de sorte que le code soit le fichier d'ancrage . En termes simples, lorsque le code métier est écrit, le framework génère automatiquement les derniers documents. S'il n'y a pas de génération de documents de jeu, vous devrez alors consacrer du temps à écrire et à maintenir des documents d'amarrage, et lorsque le nombre d'équipes augmentera, les documents seront désordonnés, désynchronisés, non à jour et oublieront de mise à jour, etc.

En termes de déploiement, ioGame prend en charge le déploiement multi-serveur, à processus unique et le déploiement multi-serveur, multi-processus et multi-machine ; la méthode de déploiement peut être changée à volonté sans changer le code. Dans la vie de tous les jours, nous pouvons nous développer selon une réflexion unique, et en matière de production, nous pouvons choisir d'utiliser un déploiement multi-processus.

En termes de test client simulé, ioGame fournit un module de test de pression et de demande client simulée . Ce module est utilisé pour simuler le client et simplifier la charge de travail de simulation, il suffit d'écrire la demande et le rappel correspondants. En plus de simuler des demandes simples, il peut généralement effectuer une orchestration de demandes complexes et prendre en charge les tests de pression de services complexes. Le processus de test simulé est interactif, mais prend également en charge l'automatisation des tests. Différent du test unitaire, ce module peut simuler l'environnement réseau réel, et l'interaction avec le serveur pendant le test de simulation est durable et interactive .

En termes de flexibilité architecturale , l'architecture d'ioGame se compose de trois parties : 1. Serveur externe de jeu, 2. Broker (passerelle de jeu), 3. Serveur logique de jeu ; les trois peuvent être indépendants les uns des autres ou intégrés les uns aux autres. Par conséquent, l'utilisation d'ioGame peut répondre à presque toutes les méthodes de déploiement, et peut s'adapter à différents types de jeux en fonction de vos besoins, et il est simple d'effectuer ces tâches dans ioGame.

Les modules de projet écrits par les développeurs basés sur ioGame sont généralement bien organisés, grâce à la conception raisonnable du cadre de routage , et fournissent également un contrôle d'accès élégant pour le routage . Lorsque nous organisons ces modules, ce sera une bonne aide pour d'autres développeurs pour prendre en charge le projet ou assurer le suivi de la maintenance ( arrangement des modules et suggestions ). Peut-être que vous ne pouvez pas sentir la puissance de cette pièce à ce stade, mais en l'utilisant en profondeur, vous vous rendrez compte des nombreux avantages et avantages de cette conception.

Les projets écrits par des développeurs basés sur ioGame ont généralement une syntaxe concise, des performances élevées et une faible latence ; le framework nécessite au moins JDK17, afin que le projet puisse profiter des améliorations apportées par ZGC et de la simplicité de la syntaxe. À partir de JDK17, ZGC est bien en deçà de son objectif de temps de pause inférieur à la milliseconde , ce qui peut nettoyer l'excès de mémoire sans affecter la vitesse du jeu. De cette façon, il n'y aura aucun problème de retard ou de plantage, ce qui équivaut à introduire un maître de réglage JVM déguisé dans le projet. Pour plus de détails, veuillez vous référer à  JDK 17 garbage collection GC performance sauts et limites .

En résumé, ioGame est un cadre très approprié pour le développement de jeux en ligne. Il vous permet de créer facilement des serveurs de jeu hautes performances, à faible latence et facilement évolutifs, ce qui vous fait gagner du temps et des ressources. Si vous souhaitez développer rapidement des jeux en ligne incroyables, n'hésitez pas à choisir ioGame dès maintenant ! Le cadre protège de nombreuses tâches complexes et répétitives, et peut clairement organiser et définir la structure du module fonctionnel et le processus de développement dans le projet , réduisant ainsi les coûts de maintenance ultérieurs du projet.

Le cadre fournit un bon support à toutes les étapes du développement, du déploiement, des tests de résistance et des tests de simulation, etc. Je pense que vous avez déjà eu une compréhension préliminaire d'ioGame. Bien qu'il existe encore de nombreuses fonctions et fonctionnalités riches qui n'ont pas été introduites, vous pouvez acquérir une compréhension plus approfondie grâce à la pratique de suivi. Merci d'avoir lu et nous nous réjouissons de votre utilisation d'ioGame pour créer votre propre serveur de jeu.


ioGame se compose  de [ Network Communication Framework ] et [ Business Framework ].

  • Cadre de communication réseau : la responsabilité est la communication réseau entre les serveurs
  • Cadre métier : la responsabilité est la façon dont la logique métier est gérée et écrite

Cadre de communication réseau 

SOFABolt  est un ensemble de framework de communication réseau basé sur Netty développé par Ant Financial Services Group.

  • Afin de permettre aux programmeurs Java de se concentrer davantage sur la mise en œuvre de la logique métier basée sur la communication réseau , plutôt que de trop s'enchevêtrer dans la mise en œuvre du NIO sous-jacent du réseau et de traiter les problèmes de réseau difficiles à déboguer, Netty a vu le jour. .
  • Afin de permettre aux développeurs de middleware de se concentrer davantage sur la réalisation des fonctions et fonctionnalités du produit, au lieu de fabriquer à plusieurs reprises les rouages ​​du framework de communication, SOFABolt a vu le jour.

Le nom de Bolt est tiré de l'animation Disney - Lightning Dog. Il s'agit d'un cadre de communication léger, facile à utiliser, performant et facile à étendre, basé sur les meilleures pratiques de Netty .

cadre commercial

Si  le boulon du canapé  est de permettre aux programmeurs Java de se concentrer davantage sur la mise en œuvre de la logique métier basée sur la communication réseau . Le cadre métier consiste à résoudre le problème de la mise en œuvre pratique de la logique métier . Le framework métier fait partie du framework du jeu. Sa responsabilité est de simplifier la mise en œuvre de la logique métier des programmeurs. Le framework métier permet aux programmeurs de commencer rapidement à écrire le business du jeu.

Le cadre métier combine  asm  avec des modèles de conception tels que Singleton, Flyweight et Command pour chaque action (c'est-à-dire la méthode de traitement de l'entreprise) et obtient l'action via un tableau, ce qui est une manière quasi native.

Dans un seul thread, le framework métier peut exécuter 11,52 millions de fois de logique métier par seconde en moyenne


Schéma d'architecture

Grâce à ioGame, vous pouvez facilement créer un nœud central sans cluster, une automatisation de cluster et un serveur de jeu en ligne étape par étape.

Conception d'architecture asynchrone et événementielle sans verrouillage, cluster sans nœud central, équilibrage de charge intégré, support distribué, augmentation ou diminution dynamique des machines, conception pour éviter l'explosion de classe ;

Chaque serveur externe de jeu, chaque serveur logique de jeu et chaque courtier (passerelle de jeu) de la figure peuvent être déployés dans un processus séparé, et les serveurs logiques peuvent communiquer entre les processus (le serveur externe de jeu est également un type de serveur logique).

Cluster de passerelle de jeu

Le courtier (passerelle de jeu) prend en charge le déploiement du cluster . L'utilisation du cluster est simple. Le cluster n'a pas de nœud central, d'automatisation du cluster et de son propre équilibrage de charge . ioGame lui-même inclut l'enregistrement de service, et vous n'avez pas besoin de connecter un centre d'enregistrement de service externe, tel qu'Eureka, ZooKeeper, etc. (ce qui permet d'économiser des coûts de serveur déguisés).

Grâce à l'intervention du courtier (passerelle de jeu), la conception précédente très compliquée de l'équilibrage de charge, comme l'enregistrement du service, le bilan de santé (disponible dans les versions ultérieures), la maintenance de la connexion au serveur, etc., n'est plus nécessaire dans ioGame, et la structure est simple beaucoup. En fait, les performances d'un seul courtier (passerelle de jeu) sont déjà suffisantes, car la passerelle de jeu n'effectue que le transfert.

serveur logique

Le serveur logique fait généralement référence au serveur externe du jeu et au serveur logique du jeu. Il peut y avoir de nombreux serveurs logiques et la limite supérieure théorique du nombre d'extensions de serveur logique est la limite supérieure de connexion de netty.

 

Serveur externe de jeu

Le serveur externe maintient une longue connexion avec l'utilisateur (joueur). Faisons d'abord une hypothèse : si l'un de nos matériels nous permet d'établir une limite de connexion utilisateur de 5 000 personnes, lorsque le nombre d'utilisateurs atteint 7 000, nous pouvons ajouter un serveur externe supplémentaire pour le détournement et la décompression. En raison de la simplicité de l'extension du serveur externe du jeu, cela signifie que le nombre de joueurs en ligne simultanés peut facilement atteindre des millions, des dizaines de millions, voire plus.

Même si nous démarrons plusieurs serveurs externes du jeu, les développeurs n'ont pas besoin de se soucier du serveur externe du jeu auquel ces joueurs sont connectés. Ces joueurs peuvent toujours recevoir des messages de diffusion (push), car le framework a déjà fait ces choses ; du point de vue du joueur, nous n'avons qu'"un" serveur. De même, du point de vue du développeur, nous n'avons qu'"un" serveur externe de jeu ;

En termes de combinaison structurelle (diversité de déploiement)

En termes de déploiement, il prend en charge le déploiement multi-serveur et mono-processus (similaire à une seule application, et le débogage est plus pratique dans le développement étape par étape), et prend également en charge multi-serveur, multi-processus et multi- déploiement des machines.

L'architecture se compose de trois parties : 1. Serveur externe de jeu, 2. Broker (passerelle de jeu), 3. Serveur logique de jeu ; les trois peuvent être indépendants les uns des autres ou intégrés les uns aux autres , tels que :

  • Les trois parties du serveur de jeu, du courtier (passerelle de jeu) et du serveur de logique de jeu sont en un seul processus ; [ Application unique ; le débogage est plus pratique lors du développement étape par étape ]
  • Les trois parties du serveur de jeu, Broker (passerelle de jeu) et serveur de logique de jeu sont dans plusieurs processus ; [ distribué ]
  • Les deux parties du serveur de jeu et du courtier (passerelle de jeu) sont en un seul processus ; tandis que le serveur de logique de jeu est en plusieurs processus ; [similaire à l' architecture traditionnelle des jeux précédents ]
  • Il est même possible de ne pas avoir besoin du serveur externe du jeu, et d'utiliser uniquement les deux parties de Broker (passerelle de jeu) et de serveur de logique de jeu pour d'autres services système ;

Parce que ioGame suit les principes de conception orientés objet (principe de responsabilité unique, principe d'ouverture et de fermeture, principe de remplacement littéraire, principe d'inversion de dépendance, principe de ségrégation d'interface, loi de Dimiter), etc., les responsabilités de l'architecture sont clairement définies et peuvent être combinées de manière flexible ;

Le serveur externe du jeu est l'une des trois parties de l'architecture, et le serveur externe du jeu par défaut est implémenté sur la base de netty. Si nécessaire, à l'avenir, nous pourrons également utiliser des cadres de communication tels que  mina et smart-socket  pour fournir une implémentation supplémentaire du serveur externe du jeu; même si nous utilisons le serveur externe du jeu fourni par  mina et smart-socket  , cela n'affectera pas l'existant La logique du jeu sert la logique métier, car le jeu satisfait au principe de responsabilité unique pour le serveur externe, et ne maintient que les connexions à long terme des utilisateurs (joueurs).

Presque tous les développeurs ont rencontré une telle situation ; au stade initial du projet, il est généralement développé sous la forme d'un projet unique, et à mesure que la demande continue d'augmenter et d'itérer, il évoluera vers un projet gonflé ; Réaliser des scissions est difficile et coûteux. voire inachevé, entraînant un refactoring complet ;

ioGame fournit une variété de déploiements en termes de combinaison structurelle.Grâce à la combinaison, ces problèmes de division peuvent être évités dès le début du projet. Dans la phase de développement, nous pouvons utiliser la pensée de développement d'application monolithique, ce qui réduit le coût de développement. Grâce à la méthode de développement d'une seule application, le débogage est plus pratique lors du développement de projets étape par étape ; cela peut non seulement prendre en compte le développement étape par étape, diviser les modules de projet, mais également réduire les coûts de développement de l'équipe ;

Avantages architecturaux

L'architecture a un haut degré d'abstraction, permettant aux concepteurs de se concentrer davantage sur l'entreprise sans avoir à prendre en compte des problèmes tels que l'implémentation sous-jacente et les paramètres de communication.

La transparence de l'emplacement du serveur logique ; en même temps, en raison de la modularisation et de l'abstraction, le couplage entre les serveurs de l'ensemble de l'architecture est très faible et le serveur logique peut être utilisé immédiatement après l'enregistrement, ce qui augmente considérablement l'évolutivité et la maintenabilité, et rend l'expansion dynamique facile et efficace. Étant donné que le serveur logique est enregistré auprès du courtier (passerelle de jeu), le serveur logique peut être dynamiquement ajouté, supprimé et modifié ; puisque le couplage entre les serveurs logiques est faible, le travail de débogage et de test est également contrôlable ;

La structure la plus claire est que le serveur externe du jeu est responsable du maintien de l'accès client (connexion des utilisateurs et des joueurs), le serveur logique du jeu est responsable de la logique métier et le courtier (passerelle du jeu) est responsable de la planification entre eux ; parce que de l'architecture fractionnée Raisonnable, il est donc particulièrement pratique d'utiliser k8s pour déployer librement ces trois serveurs.Le serveur ayant un niveau d'eau élevé peut être étendu et le niveau d'eau peut être réduit lorsque le niveau d'eau passe.


La programmation de jeux peut être facilitée grâce à ioGame, voici un exemple commercial

Définition du fichier de protocole

Tout d'abord, nous personnalisons un fichier de protocole, qui est utilisé comme description de notre opérateur commercial. Ce protocole est écrit en code java pur, en utilisant jprotobuf, jprotobuf est une  utilisation simplifiée de google protobuf , avec les mêmes performances. 

Cela peut être compris comme DTO, POJO, support de données commerciales, etc., dont le but principal est la transmission de données commerciales ;

/** 请求 */
@ProtobufClass
@FieldDefaults(level = AccessLevel.PUBLIC)
public class HelloReq {
    String name;
}

Action

La programmation du serveur de jeu , après que le serveur ait reçu les données commerciales, traite les données commerciales. Ce code métier peut prendre en charge TCP, WebSocket, UDP en même temps.

@ActionController(1)
public class DemoAction {
    @ActionMethod(0)
    public HelloReq here(HelloReq helloReq) {
        HelloReq newHelloReq = new HelloReq();
        newHelloReq.name = helloReq.name + ", I'm here ";
        return newHelloReq;
    }
}

 Une méthode représente une action (une action métier) dans le cadre métier .

Le paramètre du nom de la méthode est utilisé pour recevoir les données métier transmises par le frontal. Lorsque la méthode revient, les données peuvent être reçues par le frontal du jeu. Les programmeurs n'ont pas besoin de se soucier des détails internes du cadre métier.

Comme on peut le voir dans l'exemple ci-dessus, ce n'est pas différent des classes Java ordinaires, et cette méthode de conception évite l'explosion de classe . Si vous n'êtes responsable que de l'écriture du business du jeu , alors l'apprentissage du framework business peut s'arrêter ici.

La programmation de jeux est aussi simple que cela !

 

Q : Puis-je commencer programmer le serveur de jeu ?

Oui, vous pouvez déjà commencer à programmer le serveur de jeu.

 

Exemple d'accès (console)

Lorsque nous accédons  à la méthode ici  (généralement demandée par le front-end du jeu), la console imprimera

┏━━━━━ Debug.[(DemoAction.java: 4 ).here] ━━━ [cmd: 1 - subCmd: 0 - cmdMerge: 65536 ] 
┣ userId : 888 
┣ Paramètres: helloReq : HelloRe q(name=Tower Tom) 
┣ Réponse : HelloRe q(name=Tam, I'm here ) 
┣ Temps : 0 ms (temps total passé sur les méthodes métier) 
┗━━━━━ Debug [DemoAction.java] ━━━ [Current thread : RequestMessage -8-1 ] _ _ _

 

Instructions d'impression de la console

Debug. [(DemoAction.java:4).here]:
    表示执行业务的是 DemoAction 类下的 here 方法,4 表示业务方法所在的代码行数。
    在工具中点击控制台的 DemoAction.java:4 这条信息,就可以跳转到对应的代码中(快速导航到对应的代码),这是一个开发良好体验的开始!
userId :  
    当前发起请求的 用户 id。
参数 :  
    通常是游戏前端传入的值。
响应:
    通常是业务方法返回的值 ,业务框架会把这个返回值推送到游戏前端。
时间:
    执行业务方法总耗时,我们可根据业务方法总耗时的时长来优化业务。
路由信息:[cmd - subCmd]
    路由是唯一的访问地址。

Avec les informations ci-dessus, les développeurs de jeux peuvent rapidement localiser le problème. S'il n'y a pas d'informations visuelles, beaucoup de temps sera perdu en communication entre le front et le back-end pendant le développement. Les questions incluent :

  • Que ce soit pour passer des paramètres (l'extrémité avant du jeu l'a dit)
  • S'il faut répondre à la question (le backend du jeu dit qu'il est revenu)
  • Problème de temps d'exécution de l'entreprise (le front-end du jeu indique qu'il n'a pas reçu de réponse, mais le back-end du jeu indique qu'il a répondu il y a longtemps)

Parmi elles, la navigation dans le code permet aux développeurs de passer rapidement au code correspondant de la classe métier. Dans un projet de coopération multi-personnes, on peut savoir rapidement quelles méthodes ont été exécutées par le métier, afin de pouvoir rapidement le lire ou le modifier ;

fonction intégrée

Une variété de modules optionnels sont intégrés, qui peuvent être sélectionnés à la demande pour faciliter le développement d'applications :

  • Événements de domaine  ( MQ léger et autonome le plus rapide - perturbateur ; via le module d'événement de domaine, vous pouvez implémenter un Guava-EventBus similaire, le modèle ApplicationEvent basé sur les événements Spring, le découplage métier, éviter la concurrence et ne pas bloquer le thread principal de votre système. .. etc., diverses opérations ondulatoires) 
  • Retard de tâche  (la tâche peut être exécutée, suspendue, annulée, etc. à un certain moment dans le futur, pas une planification de tâche similaire à Quartz)
  • Commutation multi-environnement  (prise en charge de la configuration dans différents environnements d'exploitation)
  • light-jprotobuf  ( pour compenser l'exigence de jprotobuf selon laquelle plusieurs objets ne peuvent pas être générés dans un seul fichier source .proto et pour simplifier les commentaires de jprotobuf sur les fichiers source )
  • Verrouillage pas à pas  (implémentation simple basée sur Redisson)

Autres fonctionnalités intégrées :

Pour la foule ?

  1. Je suis engagé depuis longtemps dans les développeurs de systèmes internes Web et je veux en savoir plus sur le jeu
  2. nouveau dans le développement de jeux
  3. Ceux qui ne se sont jamais engagés dans le développement de jeux, mais qui s'y intéressent
  4. Les apprenants qui s'intéressent à l'application des modèles de conception dans la pratique et au boulon de canapé
  5. réceptif à la nouveauté
  6. Ceux qui veulent abandonner leurs codes ancestraux

Recommander des personnes ayant plus d'un an d'expérience pratique en programmation

ioGame  fournit une multitude de documentation en ligne de haute qualité pour aider votre équipe, amenez vos amis, afin que vous n'ayez pas à leur enseigner main dans la main.

Je suppose que tu aimes

Origine www.oschina.net/news/254262/iogame-17-1-54-released
conseillé
Classement