MQTT.JS est une bibliothèque client pour le protocole MQTT, écrit en javascript pour Node.js et le navigateur.
MQTT.JS est un projet open source ouvert, voir la section contributive pour savoir ce que cela signifie.
v5.0.0 (07/2023)
MqttClient , new sont maintenant requis.V4.0.0 (publié 04/2020) supprime le support pour toutes les versions de nœud de fin de vie et prend désormais en charge le nœud V12 et V14. Il ajoute également des améliorations pour déboguer la journalisation, ainsi que certains ajouts de fonctionnalités.
En tant que changement de rupture , par défaut, un gestionnaire d'erreurs est intégré au client MQTT.JS, donc si des erreurs sont émises et que l'utilisateur n'a pas créé de gestionnaire d'événements sur le client pour les erreurs, le client ne se cassera pas à la suite d'erreurs non gérées. De plus, des erreurs TLS typiques comme ECONNREFUSED , ECONNRESET ont été ajoutées à une liste d'erreurs TLS qui seront émises par le client MQTT.JS, et peuvent donc être gérées en tant qu'erreurs de connexion.
V3.0.0 ajoute la prise en charge de MQTT 5, la prise en charge du nœud v10.x et de nombreux correctifs pour améliorer la fiabilité.
Remarque: le support MQTT V5 est expérimental car il n'a pas encore été mis en œuvre par les courtiers.
V2.0.0 supprime la prise en charge du nœud V0.8, V0.10 et V0.12, et il est plus rapide dans les paquets d'envoi. Il supprime également toutes les fonctionnalités dépréciées dans V1.0.0, principalement mqtt.createConnection et mqtt.Server . De la v2.0.0, les abonnements sont restaurés lors de la reconnexion si clean: true . V1.xx est maintenant en LTS , et il continuera d'être pris en charge tant qu'il y a des utilisateurs V0.8, V0.10 et V0.12.
En tant que changement de rupture , l'option encoding dans l'ancien client est supprimée, et maintenant tout est UTF-8 à l'exception du password dans le message de connexion et payload dans le message de publication, qui sont Buffer .
Un autre changement de rupture est que MQTT.JS est désormais par défaut à MQTT V3.1.1, donc pour prendre en charge les anciens courtiers, veuillez lire le Doc des options du client.
V1.0.0 améliore l'architecture globale du projet, qui est désormais divisé en trois composants: MQTT.JS garde le client, MQTT-Connection inclut le code de connexion Barebone pour l'utilisation côté serveur, et le packet MQTT comprend le analyseur de protocole et le générateur. Le nouveau client améliore les performances par un facteur de 30%, incorpore la prise en charge de WebSocket (MOWS est désormais obsolète), et il a une meilleure prise en charge pour les QoS 1 et 2. L'API précédente est toujours prise en charge mais obsolète, en tant que telle, elle n'est pas documentée dans cette lecture.
npm install mqtt --savePar souci de simplicité, mettons l'abonné et l'éditeur dans le même fichier:
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "mqtt://test.mosquitto.org" ) ;
client . on ( "connect" , ( ) => {
client . subscribe ( "presence" , ( err ) => {
if ( ! err ) {
client . publish ( "presence" , "Hello mqtt" ) ;
}
} ) ;
} ) ;
client . on ( "message" , ( topic , message ) => {
// message is Buffer
console . log ( message . toString ( ) ) ;
client . end ( ) ;
} ) ;sortir:
Hello mqttMQTT.JS peut être utilisé dans les applications natives React. Pour l'utiliser, voir l'exemple natif React
Si vous souhaitez exécuter votre propre courtier MQTT, vous pouvez utiliser Mosquitto ou Aedes-Cli et le lancer.
Vous pouvez également utiliser une instance de test: test.mosquitto.org.
Si vous ne souhaitez pas installer un courtier séparé, vous pouvez essayer d'utiliser les AEDE.
const mqtt = require ( "mqtt" ) // require mqtt
const client = mqtt . connect ( "mqtt://test.mosquitto.org" ) // create a client import mqtt from "mqtt" ; // import namespace "mqtt"
let client = mqtt . connect ( "mqtt://test.mosquitto.org" ) ; // create a client import { connect } from "mqtt" ; // import connect from mqtt
let client = connect ( "mqtt://test.mosquitto.org" ) ; // create a client MQTT.JS regroupe une commande pour interagir avec un courtier. Pour l'avoir disponible sur votre chemin, vous devez installer MQTT.js à l'échelle mondiale:
npm install mqtt -gPuis, sur un terminal
mqtt sub -t ' hello ' -h ' test.mosquitto.org ' -vDans un autre
mqtt pub -t ' hello ' -h ' test.mosquitto.org ' -m ' from MQTT.js ' Voir mqtt help <command> pour l'aide de la commande.
MQTT.JS utilise le package de débogage à des fins de débogage. Pour activer les journaux de débogage, ajoutez la variable d'environnement suivante lors de l'exécution:
# ( example using PowerShell, the VS Code default )
$env:DEBUG='mqttjs*' Une partie importante de toute connexion WebSocket est ce qu'il faut faire lorsqu'une connexion tombe et que le client doit se reconnecter. MQTT a une prise en charge de reconnexion intégrée qui peut être configurée pour se comporter de manière à s'adapter à l'application.
transformWsUrl (WebSocket uniquement)Lorsqu'une connexion MQTT baisse et doit se reconnecter, il est courant d'exiger que toute authentification associée à la connexion soit maintenue à jour avec le mécanisme d'automne sous-jacent. Par exemple, certaines applications peuvent transmettre un jeton AUTH avec des options de connexion sur la connexion initiale, tandis que d'autres services cloud peuvent nécessiter une URL signer avec chaque connexion.
Au moment où la reconnexion se déroule dans le cycle de vie de l'application, les données d'automne d'origine peuvent avoir expiré.
Pour résoudre ce problème, nous pouvons utiliser un crochet appelé transformWsUrl pour manipuler l'une ou l'autre URL de connexion ou les options du client au moment d'une reconnexion.
Exemple (Mettre à jour ClientId et nom d'utilisateur sur chaque reconnexion):
const transformWsUrl = ( url , options , client ) => {
client . options . username = `token= ${ this . get_current_auth_token ( ) } ` ;
client . options . clientId = ` ${ this . get_updated_clientId ( ) } ` ;
return ` ${ this . get_signed_cloud_url ( url ) } ` ;
}
const connection = await mqtt . connectAsync ( < wss url > , {
... ,
transformWsUrl : transformUrl ,
} );Maintenant, chaque fois qu'une nouvelle connexion WebSocket est ouverte (espérons-le pas trop souvent), nous obtiendrons une nouvelle URL signée ou des données de jetons d'authentification.
Remarque: Actuellement, ce crochet ne prend pas en charge les promesses, ce qui signifie que pour utiliser le dernier jeton AUTH, vous devez avoir un mécanisme extérieur en cours d'exécution qui gère l'authentification au niveau de l'application rafraîchissante afin que la connexion WebSocket puisse simplement saisir le dernier jeton valide ou URL signé.
createWebsocket (WebSocket uniquement)Lorsque vous devez ajouter un sous-protocole ou un en-tête WebSocket personnalisé pour ouvrir une connexion via un proxy avec une authentification personnalisée, ce rappel vous permet de créer votre propre instance d'un WebSocket qui sera utilisé dans le client MQTT.
const createWebsocket = ( url , websocketSubProtocols , options ) => {
const subProtocols = [
websocketSubProtocols [ 0 ] ,
'myCustomSubprotocolOrOAuthToken' ,
]
return new WebSocket ( url , subProtocols )
}
const client = await mqtt . connectAsync ( < wss url > , {
... ,
createWebsocket : createWebsocket ,
} );reconnectPeriod Pour vous assurer que le client MQTT essaie automatiquement de se reconnecter lorsque la connexion est supprimée, vous devez définir l'option client reconnectPeriod à une valeur supérieure à 0. Une valeur de 0 désactivera la reconnexion, puis terminera la connexion finale lorsqu'elle baisse.
La valeur par défaut est de 1000 ms, ce qui signifie qu'il essaiera de reconnecter 1 seconde après avoir perdu la connexion.
Notez que cela ne permettra que les reconnexions après un délai d'expiration de connexion ou après une connexion réussie. Il n'activera pas (par défaut) les connexions de réessayer qui sont activement refusées avec une erreur de Connack par le serveur.
Pour activer également les reconnexions automatiques pour les erreurs de Connack, définissez reconnectOnConnackError: true .
Si le client définit l'option autoUseTopicAlias:true alors MQTT.JS utilise automatiquement l'alias du sujet existant.
Exemple de scénario:
1. PUBLISH topic: ' t1 ' , ta:1 (register)
2. PUBLISH topic: ' t1 ' - > topic: ' ' , ta:1 (auto use existing map entry)
3. PUBLISH topic: ' t2 ' , ta:1 (register overwrite)
4. PUBLISH topic: ' t2 ' - > topic: ' ' , ta:1 (auto use existing map entry based on the receent map)
5. PUBLISH topic: ' t1 ' (t1 is no longer mapped to ta:1)L'utilisateur n'a pas besoin de gérer le sujet qui est mappé à quel alias de sujet. Si l'utilisateur souhaite enregistrer l'alias du sujet, publiez le sujet avec l'alias du sujet. Si l'utilisateur souhaite utiliser un alias de sujet, publiez un sujet sans alias de sujet. S'il y a un alias de sujet mappé, puis l'a ajouté en tant que propriété et mettez à jour le sujet à la chaîne vide.
Si le client définit l'option autoAssignTopicAlias:true alors MQTT.JS utilise automatiquement l'alias du sujet existant. Si aucun alias de sujet n'existe, affectez automatiquement un nouveau sujet vacant. Si l'alias du sujet est entièrement utilisé, l'entrée LRU (la moins récemment utilisée) est-elle écrasée.
Exemple de scénario:
The broker returns CONNACK (TopicAliasMaximum:3)
1. PUBLISH topic: ' t1 ' - > ' t1 ' , ta:1 (auto assign t1:1 and register)
2. PUBLISH topic: ' t1 ' - > ' ' , ta:1 (auto use existing map entry)
3. PUBLISH topic: ' t2 ' - > ' t2 ' , ta:2 (auto assign t1:2 and register. 2 was vacant)
4. PUBLISH topic: ' t3 ' - > ' t3 ' , ta:3 (auto assign t1:3 and register. 3 was vacant)
5. PUBLISH topic: ' t4 ' - > ' t4 ' , ta:1 (LRU entry is overwritten)L'utilisateur peut également enregistrer manuellement la paire de sujets-Alias à l'aide de la rubrique publique: «Some», Ta: x. Cela fonctionne bien avec l'attribution automatique du sujet.
mqtt.connect()mqtt.connectAsync()mqtt.Client()mqtt.Client#connect()mqtt.Client#publish()mqtt.Client#publishAsync()mqtt.Client#subscribe()mqtt.Client#subscribeAsync()mqtt.Client#unsubscribe()mqtt.Client#unsubscribeAsync()mqtt.Client#end()mqtt.Client#endAsync()mqtt.Client#removeOutgoingMessage()mqtt.Client#reconnect()mqtt.Client#handleMessage()mqtt.Client#connectedmqtt.Client#reconnectingmqtt.Client#getLastMessageId()mqtt.Store()mqtt.Store#put()mqtt.Store#del()mqtt.Store#createStream()mqtt.Store#close()Se connecte au courtier spécifié par l'URL et les options donné et renvoie un client.
L'URL peut figurer sur les protocoles suivants: 'MQTT', 'MQTTS', 'TCP', 'TLS', 'WS', 'WSS', 'WXS', 'ALIS'. Si vous essayez de vous connecter à une prise Unix, ajoutez, ajoutez le suffixe +unix au protocole (Ex: mqtt+unix ). Cela définira automatiquement la propriété unixSocket .
L'URL peut également être un objet renvoyé par URL.parse() , dans ce cas, les deux objets sont fusionnés, c'est-à-dire que vous pouvez passer un seul objet avec l'URL et les options de connexion.
Vous pouvez également spécifier des options servers avec du contenu: [{ host: 'localhost', port: 1883 }, ... ] , dans ce cas, ce tableau est itéré à chaque connexion.
Pour toutes les options liées à MQTT, consultez le constructeur client.
Emballage asynchrone autour de la fonction connect .
Renvoie une Promise qui se résout vers une instance mqtt.Client lorsque le client tire un événement 'connect' ou 'end' ou rejette avec une erreur si 'error' est licenciée.
Notez que l'option manualConnect fera que la promesse renvoyée par cette fonction ne se résout pas ou ne rejettera jamais car le client sous-jacent ne déclenche jamais d'événements.
La classe Client enveloppe une connexion client à un courtier MQTT sur une méthode de transport arbitraire (TCP, TLS, WebSocket, ECC). Client est un éventaire qui a ses propres événements
Client gère automatiquement ce qui suit:
Les arguments sont:
streamBuilder est une fonction qui renvoie une sous-classe de la classe Stream qui prend en charge l'événement connect . Généralement un net.Socket .options sont les options de connexion client (voir: le paquet de connexion). Par défaut: wsOptions : est les options de connexion WebSocket. La valeur par défaut est {} . Il est spécifique pour WebSockets. Pour les options possibles, jetez un œil: https://github.com/websockets/ws/blob/master/doc/ws.md.
keepalive : 60 secondes, réglé sur 0 pour désactiver
reschedulePings : reproduction de messages de ping de reproduction après l'envoi de paquets (par défaut true )
clientId : 'mqttjs_' + Math.random().toString(16).substr(2, 8)
protocolId : 'MQTT'
protocolVersion : 4
clean : true , réglé sur false pour recevoir des messages QoS 1 et 2 tout en étant hors ligne
reconnectPeriod : 1000 millisecondes, intervalle entre deux reconnexions. Désactivez la reconnexion automatique en réglant à 0 .
reconnectOnConnackError : false , s'il faut également reconnecter si un connu est reçu avec une erreur.
connectTimeout : 30 * 1000 millisecondes, il est temps d'attendre avant qu'un Connack ne soit reçu
username : le nom d'utilisateur requis par votre courtier, le cas échéant
password : le mot de passe requis par votre courtier, le cas échéant
incomingStore
outgoingStore : un magasin pour les paquets sortants
queueQoSZero : Si la connexion est rompue, la file d'attente des messages de QoS de QoS de file d'attente (par défaut true )
customHandleAcks : fonctionnalité MQTT 5 de la manipulation personnalisée Puback et des paquets PubRec. Son rappel:
customHandleAcks: function ( topic , message , packet , done ) { /*some logic with calling done(error, reasonCode)*/ } autoUseTopicAlias : activer un alias de sujet automatique à l'aide de la fonctionnalité
autoAssignTopicAlias : activer la fonctionnalité d'alias de sujet automatique Alias
properties : Propriétés MQTT 5.0. object qui prend en charge les propriétés suivantes:
sessionExpiryInterval : Représentant l'intervalle d'expiration de la session dans number des secondes,receiveMaximum : représentant le number de valeur maximale de réception,maximumPacketSize : représentant la taille maximale du paquet que le client est prêt à accepter number ,topicAliasMaximum : Représentant la valeur maximale d'alias d'alias du sujet indique la valeur la plus élevée que le client acceptera comme alias de sujet envoyé par le number de serveur,requestResponseInformation : le client utilise cette valeur pour demander au serveur de renvoyer les informations de réponse dans le Connack boolean ,requestProblemInformation : le client utilise cette valeur pour indiquer si la raison pour laquelle la chaîne ou les propriétés utilisateur sont envoyées dans le cas des échecs boolean ,userProperties : la propriété utilisateur est autorisée à apparaître plusieurs fois pour représenter plusieurs noms, Value Pairs object ,authenticationMethod : le nom de la méthode d'authentification utilisée pour string d'authentification étendue,authenticationData : données binaires contenant des données d'authentification binary authPacket : Paramètres de object Auth Packet
will : un message qui sera envoyé automatiquement par le courtier lorsque le client se déconnecte mal. Le format est:
topic : Le sujet publierpayload : le message à publierqos : la QoSretain : le drapeau de conservationproperties : Propriétés de la volonté par MQTT 5.0:willDelayInterval : Représentant l'intervalle de retard dans number de secondes,payloadFormatIndicator : le message est le message UTF-8 des données de caractère ou non boolean ,messageExpiryInterval : la valeur est la durée de vie du message de testament en secondes et est envoyé comme l'intervalle d'expiration de la publication lorsque le serveur publie le number de message Will,contentType : décrivant le contenu de la string de message Will,responseTopic : chaîne qui est utilisée comme nom de sujet pour une string de messages de réponse,correlationData : les données de corrélation sont utilisées par l'expéditeur du message de demande pour identifier la demande du message de réponse pour le moment où il est reçu binary ,userProperties : la propriété utilisateur est autorisée à apparaître plusieurs fois pour représenter plusieurs noms, Value Pairs object transformWsUrl : facultatif (url, options, client) => url pour les protocoles WS / WSS uniquement. Peut être utilisé pour implémenter les URL de signature qui, lors de la reconnexion, peuvent avoir expiré.
createWebsocket : url, websocketSubProtocols, options) => Websocket pour les protocoles WS / WSS uniquement. Peut être utilisé pour implémenter un sous-protocole WebSocket personnalisé ou une implémentation.
resubscribe : Si la connexion est rompue et se reconnecte, les sujets abonnés sont à nouveau automatiquement abonnés (par true )
messageIdProvider : fournisseur de messagerie personnalisé. Lorsque new UniqueMessageIdProvider() est défini, le non-conflit non conflit est fourni.
log : fonction de journal personnalisé. Le package de débogage par défaut utilise.
manualConnect : Empêche le constructeur d'appeler connect . Dans ce cas, une fois que le mqtt.connect est appelé, vous devez appeler client.connect manuellement.
timerVariant : par défaut auto , qui essaie de déterminer quel minuteur est le plus approprié pour votre environnement, si vous avez des problèmes de détection, vous pouvez le définir sur worker ou native . Si aucun ne vous convient, vous pouvez passer un objet Timer avec des propriétés définies et claires:
timerVariant: {
set : ( func , timer ) => setInterval ( func , timer ) ,
clear : ( id ) => clearInterval ( id )
} forceNativeWebSocket : réglé sur true si vous avez des problèmes de détection (c'est-à-dire que le ws does not work in the browser ) pour forcer l'utilisation de WebSocket natif. Il est important de noter que s'il est défini sur true pour le premier client créé, tous les clients utiliseront WebSocket natif. Et inversement, s'il n'est pas défini ou défini sur False, tous utiliseront le résultat de détection.
unixSocket : Si vous souhaitez vous connecter à une prise Unix, définissez ceci sur true
Dans le cas où MQTTS (MQTT sur TLS) est requis, l'objet options est passé sur tls.connect() . Si vous utilisez un certificat auto-signé , définissez rejectUnauthorized: false . Cependant, soyez prudent car cela vous expose à l'homme potentiel dans les attaques intermédiaires et n'est pas recommandé pour la production.
Pour ceux qui prennent en charge plusieurs protocoles TLS sur un seul port, comme MQTTS et MQTT sur WSS, utilisez l'option ALPNProtocols . Cela vous permet de définir le protocole de négociation du protocole de couche d'application (ALPN). Vous pouvez définir ALPNProtocols en tant que tableau de chaîne, tampon ou uint8Array en fonction de votre configuration.
Si vous vous connectez à un courtier qui ne prend en charge que MQTT 3.1 (pas 3.1.1 conforme), vous devez transmettre ces options supplémentaires:
{
protocolId : 'MQIsdp' ,
protocolVersion : 3
}Ceci est confirmé sur Rabbitmq 3.2.4 et sur Mosquitto <1,3. Mosquitto version 1.3 et 1.4 fonctionne bien sans ceux-là.
'connect' function (connack) {}
Émis sur la connexion réussie (Re) (c'est-à-dire Connack RC = 0).
connack a reçu Connack Packet. Lorsque l'option de connexion clean est false et que le serveur a une session précédente pour l'option de connexion clientId , alors connack.sessionPresent Indicateur est true . Lorsque tel est le cas, vous pouvez compter sur la session stockée et préférez ne pas envoyer de commandes d'abonnement pour le client. 'reconnect' function () {}
Émis lorsqu'une reconnexion commence.
'close' function () {}
Émis après une déconnexion.
'disconnect' function (packet) {}
Émis après avoir reçu le paquet déconnecté du courtier. Fonction MQTT 5.0.
'offline' function () {}
Émis lorsque le client est hors ligne.
'error' function (error) {}
Émis lorsque le client ne peut pas se connecter (c'est-à-dire Connack RC! = 0) ou lorsqu'une erreur d'analyse se produit.
Les erreurs TLS suivantes seront émises comme un événement error :
ECONNREFUSEDECONNRESETEADDRINUSEENOTFOUND'end' function () {}
Émis lorsque mqtt.Client#end() est appelé. Si un rappel a été transmis à mqtt.Client#end() , cet événement est émis une fois que le rappel revient.
'message' function (topic, message, packet) {}
Émis lorsque le client reçoit un paquet de publication
topic sujet du paquet reçumessage la charge utile du paquet reçupacket reçu du paquet, tel que défini dans le packet MQTT 'packetsend' function (packet) {}
Émis lorsque le client envoie un paquet. Cela comprend des paquets.
packet reçu du paquet, tel que défini dans le packet MQTT 'packetreceive' function (packet) {}
Émis lorsque le client reçoit un paquet. Cela comprend les paquets de sujets abonnés ainsi que les paquets utilisés par MQTT pour gérer les abonnements et les connexions
packet reçu du paquet, tel que défini dans le packet MQTT Par défaut, le client se connecte lorsque le constructeur est appelé. Pour éviter cela, vous pouvez définir manuellement l'option manualConnect sur true et appeler client.connect() manuellement.
Publier un message à un sujet
topic est le sujet à publier sur, Stringmessage est le message de publication, Buffer ou Stringoptions sont les options pour publier avec, notamment:qos QoS, Number , par défaut 0retain le drapeau de conservation, Boolean , false par défautdup Mark comme drapeau en double, Boolean , par défaut falseproperties : object de propriétés MQTT 5.0payloadFormatIndicator : La charge utile est des données de caractère encodées UTF-8 ou non boolean ,messageExpiryInterval : la durée de vie du message d'application dans number des secondes,topicAlias : valeur utilisée pour identifier le sujet au lieu d'utiliser le number de nom de sujet,responseTopic : chaîne qui est utilisée comme nom de sujet pour une string de messages de réponse,correlationData : utilisé par l'expéditeur du message de demande pour identifier la demande que le message de réponse est pour le moment où il est reçu binary ,userProperties : la propriété utilisateur est autorisée à apparaître plusieurs fois pour représenter plusieurs noms, Value Pairs object ,subscriptionIdentifier : représentant l'identifiant du number d'abonnement,contentType : chaîne décrivant le contenu de la string de message d'applicationcbStorePut - function () , tiré lorsque le message est mis dans outgoingStore si la QoS est 1 ou 2 .callback - function (err, packet) , tiré lorsque la manutention de la QoS se termine, ou à la prochaine tique si la QoS 0. Une erreur se produit si le client se déconnecte. Async publish . Renvoie une Promise<Packet | undefined> .
messageId .Abonnez-vous à un sujet ou à des sujets
topic est un sujet String à souscrire ou un Array de sujets à souscrire. Il peut également s'agir d'un objet, il a des touches d'objet le nom du sujet et comme valeur la QoS, comme {'test1': {qos: 0}, 'test2': {qos: 1}} . Les caractères génériques topic MQTT sont pris en charge ( + - pour un seul niveau et # - pour le multi-niveaux)options sont les options pour s'abonner avec, notamment:qos QOS, par défaut 0nl pas d'indicateur MQTT 5.0 local (si la valeur est vraie, les messages d'application ne doivent pas être transmis à une connexion avec un clientId égal au clientId de la connexion de publication)rap retenir le drapeau MQTT 5.0 publié (si cela est vrai, les messages d'application transmis en utilisant cet abonnement Gardez le drapeau de conservation avec lequel ils ont été publiés. Si faux, les messages d'application transmis à l'aide de cet abonnement ont l'indicateur de retenue sur 0.)rh conserve la manipulation MQTT 5.0 (cette option spécifie si les messages retenus sont envoyés lorsque l'abonnement est établi.)properties : objectsubscriptionIdentifier : représentant l'identifiant du number d'abonnement,userProperties : la propriété utilisateur est autorisée à apparaître plusieurs fois pour représenter plusieurs noms, Value Pairs objectcallback - function (err, granted) Rappel tiré sur Suback où:err une erreur d'abonnement ou une erreur qui se produit lorsque le client déconnectegranted est un tableau de {topic, qos} où:topic est abonné à la rubriqueqos est le niveau de QoS accordé dessus Async subscribe . Renvoie une Promise<ISubscriptionGrant[]> .
Se désinscrire d'un sujet ou de sujets
topic est un sujet String ou un tableau de sujets à désabonneroptions : Options de désabonnement.properties : objectuserProperties : la propriété utilisateur est autorisée à apparaître plusieurs fois pour représenter plusieurs noms, Value Pairs objectcallback - function (err) , tiré sur unback. Une erreur se produit si le client se déconnecte. Async unsubscribe . Renvoie une Promise<void> .
Fermez le client, accepte les options suivantes:
force : le passer à True fermera immédiatement le client, sans attendre que les messages en vol soient. Ce paramètre est facultatif.options : Options de déconnexion.reasonCode : Débrancher number de code de la raisonproperties : objectsessionExpiryInterval : Représentant l'intervalle d'expiration de la session dans number des secondes,reasonString : représentant la raison de la string de déconnexion,userProperties : la propriété utilisateur est autorisée à apparaître plusieurs fois pour représenter plusieurs noms, Value Pairs object ,serverReference : chaîne qui peut être utilisée par le client pour identifier un autre serveur pour utiliser stringcallback : sera appelé lorsque le client sera fermé. Ce paramètre est facultatif. end asynchrone. Renvoie une Promise<void> .
Supprimez un message du store sortant. Le rappel sortant sera appelé avec l'erreur («message supprimé») si le message est supprimé.
Une fois cette fonction appelée, le MessageID est libéré et devient réutilisable.
mId : Le message du message dans le store sortant.Connectez à nouveau en utilisant les mêmes options que Connect ()
Gérez les messages avec le support à la contre-pression, un à la fois. Remplacez à volonté, mais appelez toujours callback , ou le client se bloquera.
Boolean: réglé sur true si le client est connecté. false sinon.
Numéro: obtenez le dernier ID de message. Ceci est pour les messages envoyés uniquement.
Boolean: réglé sur true si le client essaie de se reconnecter au serveur. false sinon.
Implémentation en mémoire du magasin de messages.
options sont les options du magasin:clean : true et propre messages en vol lorsque la fermeture est appelée (par défaut true ) Autres implémentations de mqtt.Store :
Ajoute un paquet au magasin, un paquet est tout ce qui a une propriété messageId . Le rappel est appelé lorsque le paquet a été stocké.
Crée un flux avec tous les paquets du magasin.
Supprime un paquet du magasin, un paquet est tout ce qui a une propriété messageId . Le rappel est appelé lorsque le paquet a été supprimé.
Ferme le magasin.
Important
Le seul protocole pris en charge dans les navigateurs est MQTT sur WebSockets, vous devez donc utiliser ws:// ou wss:// protocoles.
Bien que le module WS soit utilisé dans NodeJS, WebSocket est utilisé dans les navigateurs. Ceci est totalement transparent pour les utilisateurs à l'exception des éléments suivants:
La wsOption n'est pas prise en charge dans les navigateurs.
Les navigateurs ne permettent pas d'attraper de nombreuses erreurs WebSocket pour des raisons de sécurité comme:
L'accès à ces informations pourrait permettre à une page Web malveillante d'obtenir des informations sur votre réseau, afin qu'ils exigent que les navigateurs signalent toutes les erreurs de temps de connexion de manière indiscernable.
Ainsi, l'écoute de client.on('error') peut ne pas attraper toutes les erreurs que vous obtiendriez dans Nodejs Env.
MQTT.JS est regroupé à l'aide d'Esbuild. Il est testé en travaillant avec tous les bundlers comme WebPack, Vite et React.
Vous pouvez trouver toutes les versions MQTT Bundles dans le dossier dist :
mqtt.js - Format iife, non minifiémqtt.min.js - format iife, minifiémqtt.esm.js - Format ESM a minimiséÀ partir de MQTT.JS> 5.2.0, vous pouvez importer MQTT dans votre code comme ceci:
import mqtt from 'mqtt'Cela sera automatiquement géré par votre bundler.
Sinon, vous pouvez choisir d'utiliser un paquet spécifique comme:
import * as mqtt from 'mqtt/dist/mqtt'
import * as mqtt from 'mqtt/dist/mqtt.min'
import mqtt from 'mqtt/dist/mqtt.esm'Le bundle MQTT.JS est disponible via http://unpkg.com, en particulier sur https://unpkg.com/mqtt/dist/mqtt.min.js. Voir http://unpkg.com pour la documentation complète sur les plages de versions.
Voici comment fonctionne la QoS:
À propos de la consommation de données, évidemment, QoS 2> QoS 1> QoS 0, si cela vous préoccupe.
À partir de V5, ce projet est écrit en dactylographie et les définitions de type sont incluses dans le package.
Exemple:
import { connect } from "mqtt"
const client = connect ( 'mqtt://test.mosquitto.org' ) Prend en charge le mini-programme WeChat. Utilisez le protocole wxs . Voir les documents WeChat.
import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only' // import before mqtt.
import 'esbuild-plugin-polyfill-node/polyfills/navigator'
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "wxs://test.mosquitto.org" , {
timerVariant : 'native' // more info ref issue: #1797
} ) ; Soutient le programme Ali Mini. Utilisez le protocole alis . Voir les documents Alipay.
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "alis://test.mosquitto.org" ) ; MQTT.JS est un projet open source ouvert . Cela signifie que:
Les individus apportant des contributions importantes et précieuses sont consacrés à l'accès au projet pour contribuer comme bon leur semble. Ce projet ressemble plus à un wiki ouvert qu'un projet open source standard.
Voir le fichier contribution.md pour plus de détails.
MQTT.JS n'est possible qu'en raison de l'excellent travail des contributeurs suivants:
| Nom | Github | Gazouillement |
|---|---|---|
| Adam Rudd | Github / adamvr | Twitter / @ ADAM_VR |
| Matteo Collina | Github / mcollina | Twitter / @ Matteocollina |
| Maxime Agor | Github / 4rzael | Twitter / @ 4rzael |
| Siarhei Buntsevich | Github / scarry1992 | |
| Daniel Lando | Github / Robertslando |
Si vous souhaitez soutenir MQTT.JS, veuillez envisager de parrainer l'auteur et les agents actifs:
Mit