Java Game Server Framework ioGame 17.1.61 Plug-in de statistiques d'action appelé à chaque période

Mises à jour majeures

#223 Plug-in de statistiques d'appel à l'action pour chaque heure d'une journée

Aperçu avant impression

Ce qui est imprimé ci-dessous est la consommation de l'entreprise en une journée (24 heures). Le plan est d'utiliser l'heure comme étape de temps, et l'heure peut être divisée en étapes de minutes.

2023-11-29 action 调用次数 共 [100] 次
    0:00 共 8 次; - [15~30分钟 3 次] - [30~45分钟 2 次] - [45~59分钟 3 次]
    1:00 共 9 次; - [0~15分钟 1 次] - [15~30分钟 4 次] - [30~45分钟 1 次] - [45~59分钟 3 次]
    2:00 共 4 次; - [0~15分钟 1 次] - [15~30分钟 2 次] - [45~59分钟 1 次]
    3:00 共 2 次; - [0~15分钟 1 次] - [15~30分钟 1 次]
    4:00 共 1 次; - [0~15分钟 1 次]
    5:00 共 4 次; - [0~15分钟 1 次] - [15~30分钟 1 次] - [30~45分钟 1 次] - [45~59分钟 1 次]
    6:00 共 5 次; - [0~15分钟 1 次] - [15~30分钟 1 次] - [30~45分钟 1 次] - [45~59分钟 2 次]
    7:00 共 4 次; - [15~30分钟 2 次] - [30~45分钟 1 次] - [45~59分钟 1 次]
    8:00 共 4 次; - [0~15分钟 1 次] - [30~45分钟 3 次]
    9:00 共 4 次; - [15~30分钟 2 次] - [30~45分钟 2 次]
    10:00 共 5 次; - [15~30分钟 2 次] - [30~45分钟 1 次] - [45~59分钟 2 次]
    11:00 共 3 次; - [15~30分钟 2 次] - [45~59分钟 1 次]
    12:00 共 4 次; - [0~15分钟 2 次] - [30~45分钟 2 次]
    13:00 共 1 次; - [30~45分钟 1 次]
    14:00 共 5 次; - [0~15分钟 1 次] - [45~59分钟 4 次]
    15:00 共 6 次; - [0~15分钟 1 次] - [15~30分钟 2 次] - [45~59分钟 3 次]
    16:00 共 4 次; - [0~15分钟 1 次] - [15~30分钟 1 次] - [30~45分钟 1 次] - [45~59分钟 1 次]
    17:00 共 7 次; - [0~15分钟 1 次] - [15~30分钟 3 次] - [30~45分钟 3 次]
    18:00 共 2 次; - [0~15分钟 1 次] - [15~30分钟 1 次]
    19:00 共 7 次; - [0~15分钟 1 次] - [15~30分钟 3 次] - [30~45分钟 3 次]
    20:00 共 5 次; - [15~30分钟 3 次] - [30~45分钟 2 次]
    21:00 共 3 次; - [15~30分钟 2 次] - [30~45分钟 1 次]
    22:00 共 1 次; - [45~59分钟 1 次]
    23:00 共 2 次; - [15~30分钟 1 次] - [45~59分钟 1 次]

Exemple d'utilisation

BarSkeletonBuilder builder = ...;
// 各时间段 action 调用统计插件,将插件添加到业务框架中
var timeRangeInOut = new TimeRangeInOut();
builder.addInOut(timeRangeInOut);

Aperçu avant impression par défaut

L'impression sous la configuration par défaut est la suivante : Il n'y a pas de statistiques sur le nombre d'appels dans la phase minute, seulement des statistiques sur le nombre d'appels dans la phase horaire.

2023-11-29 action 调用次数 共 [10000] 次
    0:00 共 431 次;
    1:00 共 416 次;
    2:00 共 421 次;
    3:00 共 414 次;
    4:00 共 441 次;
    5:00 共 423 次;
    6:00 共 407 次;
    7:00 共 395 次;
    8:00 共 410 次;
    9:00 共 413 次;
    10:00 共 378 次;
    11:00 共 411 次;
    12:00 共 380 次;
    13:00 共 413 次;
    14:00 共 417 次;
    15:00 共 416 次;
    16:00 共 400 次;
    17:00 共 430 次;
    18:00 共 471 次;
    19:00 共 440 次;
    20:00 共 405 次;
    21:00 共 430 次;
    22:00 共 414 次;
    23:00 共 424 次;

Autres mises à jour

Correction de EndPoint RemoveBinding.

 

Statistiques des données de tendance d'utilisation d'ioGame

Le nombre de développeurs de serveurs de jeux prêtant attention à ioGame continue d'augmenter, statistiques mensuelles de 2022 à 09 ~ à ce jour ;

Les informations statistiques ici sont liées à l'attention des développeurs envers le framework ioGame. Il ressort des statistiques que ioGame a attiré l'attention de nombreux développeurs en raison de ses avantages tels que la facilité d'utilisation et les fonctions puissantes. Si vous voulez savoir si quelqu'un utilise ioGame, vous pouvez d'abord aller ici pour voir les statistiques, les avis des développeurs et les discussions.

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

Les statistiques mensuelles sont affichées ici. Les statistiques proviennent du backend Yuque. Ces données sont réelles, objectives et en direct .

Pour des raisons de coûts, aucun commerçant ne peut fournir ce type de service à Moubaoduo, ces statistiques sont donc plus authentiques.

Grâce aux données statistiques, nous pouvons constater que de nombreux développeurs visitent quotidiennement les documents en ligne d'ioGame, et ces données statistiques ne proviennent pas de mots ni ne sont 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 afficher les données ioGame dans le backend Yuque

assistant maven

ioGame a été téléchargé sur l'entrepôt central. Si le dernier code source du framework ne peut pas être téléchargé, il est recommandé que l'agent d'entrepôt Maven du développeur utilise l'agent natif ou Tencent Cloud. L'agent d'Alibaba Cloud n'est actuellement pas recommandé. Les paramètres du proxy Tencent Cloud peuvent être trouvés ici .

Pour la dernière version d'ioGame, consultez  https://www.yuque.com/iohao/game/ab15oe

ioGame est un framework de serveur de jeux en ligne léger qui prend en charge le clustering et la distribution sans recourir à un middleware ou à une base de données tiers . Son exécution nécessite uniquement un environnement Java. À ce stade, vous n’avez besoin que d’une seule dépendance pour obtenir l’intégralité du framework et prendre en charge toutes les fonctionnalités introduites au début.

<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 jeux en ligne ioGame

  • Conception d'architecture asynchrone et basée sur les événements sans verrouillage ; légère, capable de prendre en charge le clustering et la distribution sans dépendre d'un middleware ou d'une base de données tiers.
  • Grâce à ioGame, vous pouvez facilement créer un serveur de jeu étape par étape sans nœud central, sans automatisation de cluster et sans multi-processus.
  • Le package est petit, rapide à démarrer, occupe moins de mémoire, est plus économique, ne nécessite pas de fichiers de configuration et offre un contrôle d'accès de routage élégant.
  • Permettre aux développeurs d'utiliser un ensemble de codes métier sans modification, prenant en charge plusieurs méthodes de connexion : WebSocket, TCP, UDP
  • Permettez aux développeurs d'utiliser un ensemble de codes métier pour basculer et étendre facilement différents protocoles de communication : Protobuf, JSON
  • Performances quasi natives : le framework métier peut exécuter en moyenne 11,52 millions de fois de logique métier par seconde dans un seul thread.
  • Le code est un document de débogage commun, 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 positionné et sauté
  • Flexibilité et diversité de déploiement des architectures : peuvent être indépendantes les unes des autres ou intégrées les unes aux autres
  • 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.
  • Aider les joueurs à lier dynamiquement les serveurs de logique de jeu
  • Peut être intégré et coexister avec tout autre framework
  • Convivial pour les développeurs webMVC
  • Pas de forte dépendance au printemps
  • Aucun coût d'apprentissage

Voulez-vous développer un jeu en ligne étape par étape qui soit performant, stable, facile à utiliser, doté d'un équilibrage de charge intégré, évite la conception par explosion de classes, puisse communiquer entre les processus et les machines, n'ait pas de nœud central dans le cluster, dispose d'une automatisation de cluster et dispose de multi-processus avec état ? Qu'en est-il du serveur ? Si tel est le cas, voici un framework de serveur de jeux en ligne ioGame écrit en langage Java qui vous est recommandé. Ce qui suit donnera une brève introduction au cadre sous de nombreux aspects.

ioGame convient aux serveurs de jeux en ligne, à l'Internet des objets, aux systèmes internes et à divers scénarios nécessitant de longues connexions ;

ioGame est un framework de serveur de jeux en ligne Java avec les caractéristiques suivantes :

  • Conception d'une architecture asynchrone et basée sur les événements sans verrouillage
  • Prend en charge deux protocoles de communication : websocket et socket
  • Prend en charge différents protocoles de communication tels que protobuf et json
  • Le cluster n'a pas de nœud central, d'automatisation de cluster et de conception distribuée
  • Vraiment léger, il peut prendre en charge le clustering et la distribution sans recourir à un middleware ou à une base de données tiers.
  • Fournit 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
  • Fournir des fonctions auxiliaires pour la génération de documents de jeu
  • Petite taille de package, démarrage rapide et faible utilisation de la mémoire
  • Fournir un contrôle d'accès de routage élégant
  • Fournit une extension et des paramètres de thread flexibles
  • Affinité intelligente de co-processus

ioGame est un framework léger conçu spécifiquement pour les serveurs de jeux en ligne . Il peut vous aider à créer et exécuter rapidement votre propre serveur de jeux. Il convient aux jeux en ligne de différents types et tailles, qu'il s'agisse de H5, de jeux mobiles ou de jeux PC, qu'il s'agisse d'un simple salon de discussion ou d'un serveur mondial complexe , d'un jeu au tour par tour, d'un jeu de stratégie, d'un jeu occasionnel inactif, d'un jeu réel. -time battle, MMORPG, etc., ioGame peut répondre à vos besoins.

ioGame est également excellent en termes de packaging, d'utilisation de la mémoire, de vitesse de démarrage, etc. Une fois que le package jar atteint environ  15 Mo , l'application  termine généralement son démarrage en 0,x seconde et l'utilisation de la mémoire est faible. Pour plus de détails, consultez  l'exemple complet d'écriture rapide d'un serveur à partir de zéro .

En terme d'intégration écologique, ioGame s'intègre facilement avec spring (5 lignes de code) ; en plus de spring, il peut également s'intégrer à tout autre framework , comme solo  ..., etc., de manière à utiliser le écologie connexe d’autres cadres.

En termes de légèreté, ioGame  peut prendre en charge le clustering et la distribution sans recourir à un middleware ou à une base de données tiers , et ne nécessite qu'un environnement Java pour s'exécuter. Cela signifie qu'il est plus simple à utiliser et réduit les coûts de déploiement et les difficultés de maintenance pour les entreprises. Lorsque vous utilisez ioGame, vous n'avez besoin que d'une seule dépendance pour obtenir l'intégralité du framework, sans avoir à installer d'autres services, tels que : Nginx, Redis, MQ, Mysql, ZooKeeper, outil de compilation de 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) ; ioGame propose plusieurs types de méthodes de communication. Grâce à la combinaison de diverses méthodes de communication, vous pouvez simplement réaliser ce qui était difficile à accomplir dans le passé. ces méthodes de communication prennent en charge la communication entre processus et entre machines. Ces moyens de communication sont

  1. Réponse à la demande (traitement d'une seule demande)
  2. Diffusion (Push)
  3. Communication mutuelle entre des serveurs logiques uniques (peut communiquer entre machines et processus)
  4. Communiquer avec plusieurs serveurs logiques du même type (peut communiquer sur plusieurs machines et plusieurs processus)
  5. Communication par impulsions (peut communiquer entre plusieurs machines et plusieurs processus)
  6. Bus d'événements distribués  [sous plan] (similaire aux mécanismes de publication et d'abonnement MQ et Redis ; peut communiquer entre plusieurs machines et plusieurs processus)

 

En termes de méthodes de connexion, ioGame permet aux développeurs d'utiliser un ensemble de codes métier et de prendre 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 extensible et l'opération d'extension est également très simple, ce qui signifie que si KCP est pris en charge à l'avenir, que votre projet actuel utilise TCP, WebSocket ou UDP, vous pouvez passer à KCP ; notez que même si vous changez à KCP La méthode de connexion et le code commercial existant n'ont pas besoin d'être modifiés.

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, JSON, etc. , en utilisant un ensemble de codes commerciaux . Avec une seule ligne de code, vous pouvez passer de Protobuf à JSON sans changer vos méthodes métier.

En termes de clustering, le Broker (passerelle de jeu) d'ioGame adopte une conception de cluster automatisée à 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 gérer automatiquement et évoluer de manière élastique . Lorsque des nœuds rejoignent ou quittent, l'équilibrage de charge et la cohérence des données peuvent être automatiquement garantis sans affecter la disponibilité du service.

En termes de distribution, le serveur logique d'ioGame utilise des idées de conception distribuées, 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 peut améliorer la lisibilité et la maintenabilité du Code et faciliter 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 n'y a aucun coût d'apprentissage . Même si vous n'avez aucune expérience en programmation de jeux, vous pouvez facilement commencer. Les développeurs n'ont besoin que de maîtriser les méthodes Java courantes ou les connaissances liées à webMVC pour développer des entreprises à l'aide du framework. Le framework n'oblige pas les développeurs à modifier leurs habitudes de codage, mais s'adapte à leurs besoins.

En termes d'affinité avec le même processus , la communication entre différentes instances Netty au sein du même processus est transmise via la mémoire, sans nécessiter de transmission réseau, et la vitesse de transmission des données est extrêmement rapide. L'affinité avec le même processus signifie que le serveur logique de jeu dans le même processus a la priorité d'accès. Lorsqu'il n'y a pas de serveur logique de jeu dans le même processus capable de gérer la demande, il recherchera un serveur logique de jeu capable de gérer la demande. dans d'autres processus ou machines ; Pour faire simple, le framework gère les requêtes de manière très intelligente et donnera la priorité aux serveurs logiques dans le même processus pour la consommation.

En termes d'expérience de développement, ioGame attache une grande importance à l'expérience de développement des développeurs ; 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 des développeurs de plus en plus clair. concis;

Le cadre métier fournit un mécanisme de plug-in , enfichable et extensible. Le framework fournit des plug-ins intégrés tels  que DebugInOut , des statistiques d'appels d'action , un plug-in de surveillance des threads métier , un plug-in de statistiques d'appels pour chaque période, etc. ; différents plug-ins fournissent des objectifs différents. Par exemple, nous pouvons Utilisez des plug-ins d'appel, de surveillance et d'autres pour coopérer les uns avec les autres.Faites-nous savoir s'il y a des problèmes de performances . Une utilisation raisonnable de chaque plug-in peut nous permettre de connaître le problème pendant la phase de développement, de découvrir les problèmes à l'avance et de prévenir les problèmes à l'avance.

En termes de sécurité des threads, le framework résout le problème de concurrence d'un seul joueur pour les développeurs. Même après que le joueur se reconnecte, le même thread sera utilisé pour consommer l'entreprise. Il est recommandé d'utiliser des événements de domaine pour résoudre la concurrence de plusieurs acteurs dans la même salle ou entreprise. Problème : le framework fournit un support convivial pour l'évolutivité des threads et ne fournit pas seulement des paramètres de numéro de thread rigides ;

En termes d'expérience en 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, augmentant la charge de travail, etc. C'est également un problème que de nombreux frameworks ne peuvent pas résoudre , mais ioGame le fait ! ioGame prend en charge la méthode de démarrage de plusieurs serveurs et un seul processus, 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 front-end, ioGame fournit des fonctions auxiliaires pour générer des documents de jeu , afin que le code puisse être le document d'accueil . En termes simples, lorsque le code métier est écrit, le framework génère automatiquement la dernière documentation. S'il n'y a pas de génération de documents de jeu, vous devrez alors consacrer du temps à la rédaction et à la maintenance des documents d'accueil. De plus, lorsque le nombre de personnes dans l'équipe augmente, les documents seront désordonnés, désynchronisés et pas à jour. , et j'ai oublié de mettre à jour. .

En termes de déploiement, ioGame prend en charge le déploiement multi-serveur, mono-processus 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 quotidienne, nous pouvons nous développer selon la pensée monolithique, et lorsqu'il s'agit de production, nous pouvons choisir d'utiliser un déploiement multi-processus.

En termes de sécurité, tous les serveurs de logique de jeu n'ont pas besoin d'ouvrir de ports, évitant ainsi naturellement les attaques par scanning . Puisqu'il n'est pas nécessaire d'attribuer des ports indépendants pour chaque serveur logique, nous n'avons pas à nous soucier des autorisations d'ouverture des ports lors de l'utilisation de services tels que des serveurs cloud. Ne sous-estimez pas cet aspect, ce sont généralement ces petits détails qui font perdre le plus de temps aux développeurs. Comme nous n'avons pas besoin de gérer ces IP:Ports, cette partie de la charge de travail disparaît naturellement .

En termes de tests clients simulés, ioGame propose des modules de tests de stress et de demandes clients simulées . Ce module permet de simuler le client et de simplifier la charge de travail de simulation. Il vous suffit d'écrire les requêtes et rappels correspondants. En plus de simuler des requêtes simples, il peut également généralement effectuer une orchestration de requêtes complexes et prendre en charge les tests de résistance de services complexes. Différent des tests unitaires, ce module peut simuler un environnement réseau réel, et l'interaction avec le serveur pendant le test de simulation est durable, interactive et prend en charge l'automatisation .

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. Cela signifie que l'utilisation d'ioGame peut être adaptée à tout type de jeu , car simplement en ajustant la méthode de déploiement, elle peut répondre aux besoins de différents types de jeux. Effectuer ces ajustements dans ioGame est simple et n’a aucun impact négatif sur le code existant.

Les modules de projet écrits par les développeurs basés sur ioGame sont généralement clairs et organisés, bénéficiant d'une conception raisonnable du routage par le framework , qui fournit également un contrôle d'accès élégant pour le routage . Lorsque nous organisons ces modules, cela sera d'une grande aide pour que d'autres développeurs prennent en charge le projet ou la maintenance ultérieure ( organisation des modules et suggestions ). Peut-être que vous ne pouvez pas en ressentir la puissance à ce stade. Au fur et à mesure que vous l'utiliserez plus profondément, vous réaliserez les nombreux avantages et avantages de cette conception.

Les projets écrits par des développeurs basés sur ioGame sont généralement syntaxiquement concis, performants et à faible latence ; le framework nécessite au moins JDK17, afin que le projet puisse profiter des améliorations apportées par ZGC et profiter de la simplicité de la syntaxe. À partir du JDK17, ZGC est bien en dessous de son objectif de temps de pause inférieurs à la milliseconde , nettoyant ainsi l'excès de mémoire sans affecter la vitesse de jeu. De cette façon, il n'y aura pas de problèmes de décalage ou de crash, ce qui équivaut à introduire un maître de réglage JVM déguisé dans le projet. Pour plus de détails, veuillez consulter JDK 17 Garbage Collection GC amélioration des performances . 

Pour résumer, ioGame est un framework très adapté au développement de jeux en ligne. Il vous permet de créer facilement des serveurs de jeux hautes performances, à faible latence et facilement évolutifs tout en économisant 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 nombreux travaux complexes et répétitifs et peut clairement organiser et définir la structure des modules fonctionnels, le processus de développement, etc. dans le projet , réduisant ainsi les coûts de maintenance ultérieurs du projet.

Le framework 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à 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 en apprendre davantage grâce à une pratique ultérieure. Merci d'avoir lu et j'espère que vous utiliserez ioGame pour créer votre propre serveur de jeu.


ioGame comprend  un [ cadre de communication réseau ] et un [ cadre commercial ].

  • Framework de communication réseau : Responsable de la communication réseau entre les serveurs
  • Cadre métier : la responsabilité est la manière dont la logique métier est traitée et écrite

cadre de communication réseau 

SOFABolt  est un 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 d'une logique métier basée sur la communication réseau , au lieu d'être trop empêtrés dans la mise en œuvre de NIO au bas du réseau et de traiter des problèmes de réseau difficiles à déboguer, Netty est entré être.
  • Afin de permettre aux développeurs de middleware de se concentrer davantage sur la mise en œuvre des fonctionnalités du produit au lieu de fabriquer encore et encore les rouages ​​des cadres de communication, SOFABolt a vu le jour.

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

cadre commercial

Si  le canapé-bolt  est de permettre aux programmeurs Java de se concentrer davantage sur la mise en œuvre d'une logique métier basée sur la communication réseau . Le cadre commercial résout le problème de la mise en œuvre pratique de la logique métier . Le cadre métier fait partie du cadre du jeu. Sa responsabilité est de simplifier la mise en œuvre de la logique métier du programmeur. Le cadre métier permet aux programmeurs de commencer rapidement à écrire des activités de jeux.

 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 métier)  . L'action est obtenue via un tableau, qui est une méthode presque native.

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


Schéma d'architecture

Grâce à ioGame, vous pouvez facilement créer un serveur de jeu en ligne, étape par étape, sans cluster et automatisé par cluster.

Comme le montre la figure, la passerelle de jeu prend en charge le démarrage de plusieurs instances dans un cluster. Cette conception a choisi une approche cluster car les passerelles de jeu sont généralement sans état et sont principalement utilisées pour les tâches de planification et de transfert.

Le jeu utilise une conception étape par étape pour les serveurs externes et les serveurs logiques de jeu, prenant en charge le démarrage de plusieurs services du même type. Cela signifie qu'à mesure que le nombre de joueurs augmente, nous pouvons facilement ajouter les types correspondants de serveurs de logique de jeu pour traiter davantage de demandes.

En prenant le serveur logique de jeu comme exemple, supposons que nous démarrions deux serveurs logiques de jeu de type A, à savoir A-1 et A-2. Lorsqu'un joueur initie plusieurs requêtes au serveur logique de jeu de type A, la passerelle de jeu utilisera la politique de chargement aléatoire par défaut pour allouer les requêtes à A-1 et A-2 pour traitement.

Nous comprenons maintenant que le jeu prend en charge les augmentations et diminutions dynamiques pour les serveurs externes et les serveurs logiques de jeu. Que le nombre de joueurs augmente ou diminue à l’avenir, nous pouvons facilement y faire face. L'architecture prend en charge les mises à jour sans lecteur, grâce à la conception étape par étape. Par exemple, si le serveur logique de jeu de type A doit ajouter de nouvelles fonctions, nous pouvons démarrer A-3, A-4 et d'autres serveurs qui prennent déjà en charge les nouvelles fonctions, puis reprendre progressivement les précédents A-1 et A- 2 hors ligne, réalisant ainsi des mises à jour imperceptibles.

De plus, le framework permet également aux joueurs de lier dynamiquement le serveur logique de jeu ; une fois que le joueur est lié au serveur logique de jeu, toutes les requêtes ultérieures seront traitées par le serveur logique de jeu.

En plus des jeux, ioGame convient également aux projets liés à l'IoT. Considérez simplement les joueurs sur la photo comme des appareils concrets, et l'architecture d'ioGame peut facilement prendre en charge même s'il existe des centaines de millions d'appareils. À partir de 2022, certaines entreprises IoT ont commencé à adopter cette solution et ont eu de bonnes expériences.

ioGame convient aux serveurs de jeux en ligne, à l'Internet des objets, aux systèmes internes et à divers scénarios nécessitant de longues connexions ;


La programmation de jeux peut être simplifiée grâce à ioGame. Voici un exemple commercial

Définition du fichier de protocole

Tout d’abord, nous personnalisons un fichier de protocole, qui sert de description de notre opérateur commercial. Ce protocole est écrit en code Java pur, en utilisant jprotobuf, qui est une utilisation simplifiée de  Google Protobuf  et a les mêmes performances.

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

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

Action

Programmation du serveur de jeu . Une fois que le serveur de jeu a reçu les données commerciales, il traite les données commerciales. Ce code métier peut prendre en charge simultanément TCP, WebSocket et UDP.

@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 .

Les paramètres déclarés par la méthode sont utilisés pour recevoir les données commerciales transmises par le front-end. Lorsque la méthode revient, les données peuvent être reçues par le front-end du jeu. Les programmeurs n'ont pas besoin de se soucier des détails internes du cadre métier.

Comme le montre l'exemple ci-dessus, ce n'est pas différent des classes Java ordinaires, et cette méthode de conception évite l'explosion des classes . Si vous êtes uniquement responsable de l'écriture d'une entreprise de jeux , alors votre étude du cadre commercial peut s'arrêter ici.

La programmation de jeux est si simple !

 

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

Oui, vous pouvez déjà commencer à programmer votre serveur de jeux.

 

Exemple d'accès (console)

Lorsque nous accédons  à la méthode here  (généralement demandée par l'interface du jeu), la console imprimera

┏━━━━━ Débogage. [(DemoAction.java : 4 ).ici] ━━━ [cmd : 1 - subCmd : 0 - cmdMerge : 65536 ]
┣ userId : 888 
┣ Paramètres : helloReq : HelloRe q(name=Tamu) 
┣ Réponse : HelloRe q(name=Tamu, I'm here ) 
┣ Temps : 0 ms (temps total pris par la méthode métier)
┗━━━━━ Débogage [DemoAction.java] ━━━ [Thème actuel : RequestMessage- 8 - 1 ] 

Instructions d'impression de la console

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

Grâce aux informations ci-dessus, les développeurs de jeux peuvent rapidement localiser les problèmes. Sans informations visuelles, beaucoup de temps sera perdu en communication front-end et back-end pendant le développement. Les questions incluent :

  • La question de savoir s'il faut transmettre les paramètres (le front-end du jeu l'a dit)
  • S'il faut répondre au problème (le backend du jeu dit qu'il est revenu)
  • Problème de temps d'exécution métier (le front-end du jeu indique qu'aucune réponse n'a été reçue, le back-end du jeu indique qu'il a répondu il y a longtemps)

Parmi eux, la navigation dans le code permet aux développeurs d'accéder rapidement au code correspondant de la classe affaires.Dans les projets de coopération multi-personnes, nous pouvons rapidement savoir quelles méthodes l'entreprise a été exécutée, afin de pouvoir lire ou modifier rapidement ;

Fonctions intégrées du framework

Il existe une variété de modules optionnels intégrés qui peuvent être sélectionnés selon les besoins 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énements de domaine, vous pouvez implémenter Guava-EventBus, le modèle basé sur les événements Spring ApplicationEvent, le découplage métier, éviter la concurrence et ne pas bloquer le thread principal de votre système. .etc., diverses opérations de vagues) 
  • Retardateur de tâches  (la tâche peut être exécutée, mise en pause, annulée, etc. à un certain moment dans le futur, ce n'est pas une planification de tâches similaire à Quartz)
  • Commutation multi-environnements  (prise en charge de la configuration sous différents environnements d'exploitation)
  • light-jprotobuf  ( complète le besoin selon lequel jprotobuf ne peut pas générer plusieurs objets dans un seul fichier source .proto et simplifie les commentaires de jprotobuf sur les fichiers source )
  • Verrouillage pas à pas  (implémentation simple basée sur Redisson)

Autres fonctionnalités intégrées :

Adapté à la foule ?

  1. Je travaille depuis longtemps en tant que développeur de systèmes internes Web et je souhaite en savoir plus sur les jeux.
  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 intéressés par l'application des modèles de conception dans la pratique et le canapé-bolt
  5. Capable d'accepter de nouvelles choses
  6. Je veux abandonner le code ancestral

Recommander du personnel ayant plus d'un an d'expérience pratique en programmation

ioGame  propose une multitude de documents d'utilisation en ligne de haute qualité pour aider votre équipe. Amenez vos amis avec vous pour ne pas avoir à enseigner à la main.

Je suppose que tu aimes

Origine www.oschina.net/news/273960/iogame-17-1-61-released
conseillé
Classement