8000 GitHub - Xcraft-Inc/xcraft-core-bus: Low level messages bus
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Xcraft-Inc/xcraft-core-bus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📘 xcraft-core-bus

Aperçu

Le module xcraft-core-bus est le cœur du système de communication du framework Xcraft. Il gère le cycle de vie et les opérations du bus de commandes et d'événements, permettant la communication entre tous les composants de l'écosystème Xcraft. Ce module orchestre le chargement dynamique des modules, la gestion des connexions réseau, et fournit l'infrastructure de base pour l'exécution des commandes et la diffusion d'événements.

Sommaire

Structure du module

Le module est organisé autour de trois composants principaux :

  • Bus (lib/index.js) : Orchestrateur principal qui coordonne le Commander et le Notifier
  • Commander (lib/commander.js) : Gestionnaire des commandes avec routage intelligent
  • Notifier (lib/notifier.js) : Gestionnaire de diffusion d'événements
  • Orcish (lib/orcish.js) : Générateur de noms et tokens pour l'identification des connexions

Le module expose également des commandes intégrées pour le chargement de modules et la collecte de métriques système.

Fonctionnement global

Architecture du bus

Le bus Xcraft fonctionne selon une architecture distribuée avec deux canaux principaux :

  1. Canal Commander (pull/push) : Gère l'exécution des commandes avec routage intelligent vers les instances appropriées
  2. Canal Notifier (pub/sub) : Diffuse les événements à tous les abonnés connectés

Cycle de vie

  1. Initialisation : Génération du token Great Hall, configuration des ports et options TLS
  2. Démarrage : Lancement simultané du Commander et du Notifier sur leurs ports respectifs
  3. Chargement : Découverte et enregistrement automatique des modules exposant xcraftCommands
  4. Fonctionnement : Routage des commandes et diffusion des événements
  5. Arrêt : Fermeture propre des connexions et notification de fin de session

Gestion des modules

Le registre des commandes est peuplé au démarrage par la découverte automatique des modules. Le système recherche la propriété xcraftCommands dans tous les fichiers JavaScript des modules spécifiés et enregistre les commandes exposées.

Routage intelligent

Le Commander intègre un système de routage intelligent qui :

  • Dirige les commandes vers l'instance locale si disponible
  • Redirige vers les instances distantes via le système Horde si nécessaire
  • Gère la distribution par tribu pour les environnements multi-instances
  • Applique les politiques de sécurité et de forwarding

Exemples d'utilisation

Chargement dynamique d'un module

// Chargement d'un module via la commande intégrée
await this.quest.cmd('bus.module.load', {
  moduleName: 'goblin-workshop',
});

Collecte de métriques système

// Récupération des métriques de performance
const metrics = await this.quest.cmd('bus.xcraftMetrics', {});
console.log('Métriques V8:', metrics.data);

Utilisation du bus dans un module

// Dans un module exposant des commandes
exports.xcraftCommands = function () {
  return {
    handlers: {
      create: function* (msg, resp) {
        // Logique de création
        resp.events.send('entity.create.finished', {id: msg.data.id});
      },
    },
    rc: {
      create: {
        parallel: true,
        desc: 'Créer une nouvelle entité',
      },
    },
  };
};

Interactions avec d'autres modules

Modules fondamentaux

Modules optionnels

Intégration avec l'écosystème

Le bus sert de colonne vertébrale pour tous les modules Xcraft :

  • Les modules xcraft-core-* exposent leurs services via le bus
  • Les acteurs goblin-* communiquent exclusivement via le bus
  • Les widgets reçoivent leurs données via les événements du bus

Configuration avancée

Option Description Type Valeur par défaut
host Adresse IP ou nom d'hôte du serveur string 127.0.0.1
commanderHost Adresse spécifique pour le Commander string (hérite de host)
commanderPort Port du service Commander number 35400
notifierHost Adresse spécifique pour le Notifier string (hérite de host)
notifierPort Port du service Notifier number 35800
timeout Timeout TCP en millisecondes number 0
serverKeepAlive Keep-alive pour connexions serveur number 15000
clientKeepAlive Keep-alive pour connexions client number 6000
noTLS Désactiver le chiffrement TLS boolean false
unixSocketId Identifiant pour sockets Unix string (vide)
acceptIncoming Accepter immédiatement les nouvelles connexions boolean true
shutdownRemotes Arrêter les instances distantes boolean false
keyPath Chemin vers la clé privée du serveur string (vide)
certPath Chemin vers le certificat du serveur string (vide)
policiesPath Chemin vers les politiques de sécurité string (vide)
tribes Configuration des tribus pour déploiement multi-instances array []

Détails des sources

lib/index.js

Classe principale Bus qui orchestre l'ensemble du système. Elle hérite d'EventEmitter et coordonne le démarrage, l'arrêt et le chargement des modules. La classe gère également la génération des tokens de sécurité et la configuration des connexions réseau.

Méthodes publiques

  • boot(commandHandlers, next) — Démarre le bus avec la liste des gestionnaires de commandes, configure les ports et lance les services.
  • stop() — Arrête proprement tous les services, ferme les connexions et notifie la fin de session.
  • loadModule(resp, files, root, info, next) — Charge dynamiquement un module en analysant ses fichiers et en enregistrant ses commandes.
  • acceptIncoming() — Active l'acceptation de nouvelles connexions sur le Commander et le Notifier.
  • getToken() — Retourne le token de sécurité actuel du bus.
  • generateOrcName() — Génère un nom unique pour identifier une connexion client.
  • getCommander() — Retourne l'instance du Commander pour accès direct.
  • getNotifier() — Retourne l'instance du Notifier pour accès direct.
  • getRegistry() — Retourne le registre des commandes du Commander.
  • getBusTokenFromId(cmd, id) — Détermine le token du bus approprié pour une commande et un ID donnés.
  • runningModuleNames(onlyHot) — Retourne la liste des noms de modules en cours d'exécution.
  • runningModuleLocations(onlyHot) — Retourne la liste des emplacements des modules en cours d'exécution.
  • getModuleInfo(name, userModulePath) — Retourne les informations d'un module (chemin et pattern de fichiers).

lib/commander.js

Classe Commander qui gère l'exécution des commandes avec un système de routage intelligent. Elle hérite de Router et implémente la logique de distribution des commandes vers les instances appropriées.

Fonctionnalités principales

  • Routage automatique vers les instances locales ou distantes
  • Gestion des activités et du parallélisme
  • Support du système de tribus pour la distribution
  • Gestion des erreurs et des commandes non disponibles

Méthodes publiques

  • getRoutingKeyFromId(cmd, id, isRPC) — Détermine la clé de routage pour une commande donnée en fonction de l'ID cible.
  • registerCommandHandler(name, location, info, rc, handler) — Enregistre un gestionnaire de commande dans le registre.
  • isCommandRegistered(cmd) — Vérifie si une commande est enregistrée dans le registre.
  • isModuleRegistered(name) — Vérifie si un module est déjà enregistré.
  • getRegistry() — Retourne le registre local des commandes.
  • getFullRegistry() — Retourne le registre complet incluant les commandes des instances distantes.
  • getModuleInfo(name) — Retourne les informations d'un module spécifique.
  • registerErrorHandler(handler) — Enregistre le gestionnaire d'erreurs intégré.
  • registerAutoconnectHandler(handler) — Enregistre le gestionnaire de connexion automatique.
  • registerDisconnectHandler(handler) — Enregistre le gestionnaire de déconnexion.
  • registerShutdownHandler(handler) — Enregistre le gestionnaire d'arrêt du serveur.
  • registerMotdHandler(handler) — Enregistre le gestionnaire de message du jour.
  • registerBroadcastHandler(handler) — Enregistre le gestionnaire de diffusion.

lib/notifier.js

Classe Notifier simple qui hérite de Router et gère la diffusion d'événements en mode publication/souscription. Elle utilise le pattern pub/sub pour distribuer les événements à tous les clients connectés.

lib/orcish.js

Module utilitaire pour la génération de noms et tokens basé sur une liste de noms d'orcs fantastiques :

Méthodes publiques

  • generateGreatHall() — Génère un token cryptographique sécurisé pour identifier le bus principal.
  • generateOrcName(token) — Génère un nom unique basé sur une liste de noms d'orcs fantastiques pour identifier les connexions.

bus.js

Fichier exposant les commandes intégrées du bus via xcraftCommands :

Commandes disponibles

  • module.load — Charge dynamiquement un module spécifié par son nom.
  • xcraftMetrics — Collecte les métriques de performance du processus Node.js actuel (V8, mémoire, CPU, système).
  • ${cmdNamespace}.xcraftMetrics — Agrège les métriques de toutes les instances connectées.

Les métriques collectées incluent :

  • Statistiques V8 : heap total/utilisé, contextes natifs/détachés, métadonnées de code
  • Utilisation processus : CPU (user/system), mémoire RSS/heap/externe, buffers
  • Ressources système : RSS max, mémoire partagée, fautes de page, I/O fichiers, IPC
  • Métriques OS : priorité processus, mémoire totale système, uptime

Ce document a été mis à jour pour refléter l'état actuel du code source.

About

Low level messages bus

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  
0