Fonctionnalités

Le broker a été conçu comme un outil de travail : tout ce qui suit se règle dans le tableau de bord et s'applique sans redémarrage.

Protocole

Les deux versions à la fois

MQTT 3.1.1 et MQTT 5.0 tournent simultanément sur le même port, et les clients de l'une ou l'autre version échangent librement. Le codec encode et décode les 15 types de paquets et valide les bornes des Variable Byte Integer, les propriétés en double et les bits réservés.

QoS 0, 1 et 2

Poignées de main complètes, suppression des doublons en QoS 2 et retransmission des échanges inachevés après une reconnexion. Les files hors ligne des sessions persistantes survivent au redémarrage du broker.

Retain et Last Will

Un magasin de messages retenus avec purge par charge utile vide, y compris de branches entières, plus Retain Handling 0/1/2 et Retain As Published. Le testament est envoyé dans tous les scénarios de déconnexion, y compris le Will Delay Interval de la version 5.

Capacités de la version 5

Alias de topics dans les deux sens, Session Expiry, Receive Maximum et contrôle de flux, Maximum Packet Size, identifiants d'abonnement, abonnements partagés via $share, No Local, Message Expiry, Payload Format Indicator avec validation UTF-8, Content Type, Response Topic, Correlation Data, User Properties, codes de raison dans chaque paquet, DISCONNECT côté serveur et le paquet AUTH.

Topics système $SYS

Version, durée de fonctionnement et compteurs de clients, messages, octets et erreurs sont publiés comme messages retenus. La branche est fermée par défaut : les jokers n'atteignent pas les topics $, les clients anonymes se voient refuser tout l'espace de noms, et un interrupteur dans les réglages coupe entièrement la publication.

Tableau de bord web

Vue d'ensemble

Tuiles de synthèse, santé de la machine (processeur, mémoire et disque du répertoire de données), courbes en direct du débit de messages, du trafic et des connexions, topics actifs, écouteurs et fil d'événements.

Clients et topics

Un tableau des sessions avec une fiche par client, plus la déconnexion et la suppression de sessions. À part : les abonnements actifs avec toutes les options MQTT 5.0 et le contenu du magasin retenu.

Trafic et publication

Un flux en direct des messages et des événements du broker, avec filtre et pause. Vous pouvez publier un message avec toutes les propriétés de la version 5 directement depuis le tableau de bord — pratique pour déboguer des appareils.

Sept langues, deux thèmes

Russe, anglais, allemand, espagnol, français, italien et chinois. Les thèmes sombre et clair se changent à la volée, et le choix est retenu comme valeur par défaut du tableau de bord.

Aide intégrée

Un guide avec table des matières directement dans le tableau de bord, traduit dans les sept langues — inutile d'aller chercher la documentation ailleurs.

Accès et sécurité

Deux circuits indépendants

Il y a un seul administrateur du tableau de bord, défini dans config.json, et il ne gère que l'interface web. Les appareils MQTT forment une liste de comptes distincte, avec leurs propres mots de passe et droits. Créer un utilisateur MQTT portant le nom de l'administrateur est refusé.

ACL par topic

Une règle est un filtre, un mode d'accès (read, write, readwrite) et une décision d'autoriser ou de refuser. Les règles sont examinées de haut en bas jusqu'à la première correspondance, et tout est interdit par défaut. Le substitut $u devient le nom du client, si bien que la règle $u/# confine chaque appareil à sa propre branche. L'ordre se change par glisser-déposer.

Six sources d'identifiants

La liste interne, MySQL/MariaDB (un schéma à la manière d'EMQX), SQLite, CSV avec rechargement du fichier, JWT et un service HTTP externe. La source se change directement dans le tableau de bord : d'abord vérifiée avec le bouton Test, puis appliquée à chaud.

Des empreintes, pas des mots de passe

Les mots de passe sont stockés en PBKDF2-HMAC-SHA256 avec 210 000 itérations et un sel aléatoire. Les jetons de session et d'API ne sont conservés que sous forme d'empreinte. Les sources externes comprennent plain, sha256, sha512, bcrypt et pbkdf2.

TLS dès le départ

Un certificat auto-signé est généré au premier démarrage pour que :8883 fonctionne immédiatement. Pour la production, placez votre propre certificat dans la configuration.

Règles et flux

Réécriture de topics

Un nom de topic est remplacé à la volée, à la publication, à l'abonnement ou toujours : un filtre MQTT pour une présélection peu coûteuse, une expression régulière et un modèle de destination avec les groupes $1…$9. %u et %c sont disponibles, le préfixe $share est préservé, et UNSUBSCRIBE passe par la même réécriture. Le tableau de bord offre un bac à sable pour tester une règle.

Abonnement automatique

Un client reçoit ses abonnements dès la connexion, sans aucun SUBSCRIBE. %u et %c ainsi que toutes les options de la version 5 sont pris en charge, et les ACL sont vérifiées comme d'habitude — une règle interdite est ignorée en silence, sans couper la connexion.

Limites par topic

Une règle par motif de topic ramène un flux à une cadence ou l'écarte entièrement. La réduction garde la dernière valeur : un capteur qui émet dix fois par seconde devient un message par seconde — le plus frais. La fiche de la règle indique combien de messages ont correspondu, sont passés et ont été écartés.

Anti-inondation

Un seau à jetons par connexion : messages par seconde, rafale, octets par seconde, rafale d'octets. Un dépassement ne coupe pas la connexion et ne perd aucun message — le broker marque une pause avant la lecture suivante du socket, TCP referme la fenêtre, et l'émetteur ralentit de lui-même.

Publication différée

Le topic $delayed/{secondes}/{topic} est retenu par le broker jusqu'à échéance, de façon compatible avec EMQX. L'intervalle va d'une seconde à 49 jours, l'accusé de réception arrive aussitôt, et la file survit à un redémarrage tout en restant visible dans le tableau de bord avec un compte à rebours.

Intégration

Pontage entre brokers

Le broker se connecte comme client à un autre broker MQTT et transfère des topics dans les deux sens. L'adresse, les identifiants, TLS, la version du protocole et des règles faites de filtre + direction + QoS + préfixes sont configurables. Il y a une protection contre les boucles, une reconnexion automatique, No Local en version 5 et des compteurs dans le tableau de bord.

API REST

Tout ce que fait le tableau de bord est accessible avec un jeton bearer : statistiques, clients, abonnements, messages retenus, publication, événements, utilisateurs, réglages, ponts, règles, messages différés, import et export. Un jeton peut être émis en lecture seule.

Créer des appareils depuis votre système

POST /api/users crée un appareil avec ses droits, PATCH change le mot de passe ou l'ACL, DELETE le supprime. Les changements s'appliquent immédiatement : le broker coupe lui-même les connexions actives de cet utilisateur pour que les nouvelles règles prennent effet sans attendre.

MQTT sur WebSocket

Le sous-protocole mqtt sur le même port que le tableau de bord — les clients navigateur se connectent sans passerelle séparée. La RFC 6455 est implémentée sur net/http, sans dépendances.

Import et export

Réglages, utilisateurs et règles s'exportent en un fichier unique et se rechargent ensuite — déménager vers un autre serveur ne demande aucune ressaisie.

Exploitation

Un fichier, aucune dépendance

Un binaire en Go pur lié statiquement : pas d'environnement d'exécution, pas de libc, pas de base de données externe. Il tourne sur Debian et Ubuntu sans préparatifs et se compile pour amd64, arm64 et armhf.

Stockage SQLite

Les messages retenus sont écrits immédiatement à chaque changement, les sessions persistantes sont sauvegardées toutes les dix secondes et à l'arrêt, et les messages différés sont écrits à la mise en file. Tout ce qui a expiré est écarté au démarrage, et une ligne state restored part dans le journal.

Santé de la machine

Charge processeur, mémoire utilisée et espace libre sur le disque de données — calculés avec la bibliothèque standard, sans cgo, dans des implémentations distinctes pour Linux et Windows. La barre passe à l'orange au-delà de 75 % et au rouge au-delà de 90 %.

systemd et nginx

Une unité systemd, une configuration nginx et un script d'installation idempotent sont fournis : le tableau de bord n'écoute que sur localhost et se publie par nginx, tandis que les ports MQTT travaillent en direct.

Empreinte de compilation

Version, numéro de build et date de compilation sont inscrits dans le binaire et visibles dans le tableau de bord, dans la section À propos et via l'option -version — vous savez toujours exactement ce qui tourne.

Tout cela, gratuitement

Il n'y a aucune limite d'appareils, de messages ou d'abonnements.

Télécharger le broker