Mqtt.js ist eine Client -Bibliothek für das MQTT -Protokoll, das in JavaScript für node.js und den Browser geschrieben wurde.
Mqtt.js ist ein Open -Source -Projekt, siehe Abschnitt mit beitragender Abschnitt, um herauszufinden, was dies bedeutet.
v5.0.0 (07.07.2023)
MqttClient -Instanz ist nun new erforderlich.v4.0.0 (veröffentlicht 04/2020) beseitigt die Unterstützung für alle Versionen der Lebensende und unterstützt nun den Knoten V12 und V14. Es fügt auch Verbesserungen der Debugg -Protokollierung sowie einige Funktionen hinzu.
Als Breaking -Änderung wird standardmäßig ein Fehlerhandler in den MQTT.JS -Client integriert. Wenn also Fehler emittiert werden und der Benutzer keinen Ereignishandler für den Client für Fehler erstellt hat, wird der Client aufgrund uneingeschränkter Fehler nicht aufbrechen. Zusätzlich wurden typische TLS -Fehler wie ECONNREFUSED , ECONNRESET zu einer Liste von TLS -Fehlern hinzugefügt, die vom MQTT.JS -Client emittiert werden und daher als Verbindungsfehler behandelt werden können.
v3.0.0 fügt Unterstützung für MQTT 5, Unterstützung für Knoten v10.x und viele Korrekturen zur Verbesserung der Zuverlässigkeit hinzu.
Hinweis: Die Unterstützung von MQTT V5 ist experimentell, da sie noch nicht von Brokern implementiert wurde.
v2.0.0 entzieht die Unterstützung für den Knoten V0.8, V0.10 und V0.12 und ist beim Senden von Paketen 3x schneller. Es entfernt auch alle veralteten Funktionen in v1.0.0, hauptsächlich mqtt.createConnection und mqtt.Server . Ab V2.0.0 werden Abonnements bei der Wiederverbindung wiederhergestellt, wenn clean: true . V1.xx ist jetzt in LTS und wird weiterhin unterstützt, solange es V0.8-, V0.10- und V0.12 -Benutzer gibt.
Als Breaking-Änderung wird die encoding im alten Client entfernt, und jetzt ist alles UTF-8 mit Ausnahme des password in der Verbindungsnachricht und payload in der Veröffentlichungsnachricht, die Buffer sind.
Eine weitere Breaking -Änderung ist, dass MQTT.js jetzt standardmäßig mit MQTT v3.1.1 standardmäßig ausfällt. Um alte Makler zu unterstützen, lesen Sie bitte die Client -Optionen dokument.
V1.0.0 verbessert die Gesamtarchitektur des Projekts, die jetzt in drei Komponenten aufgeteilt ist: MQTT.js hält den Client, mqtt-connection enthält den Barebone-Verbindungscode für die serverseitige Verwendung, und MQTT-Packet enthält den Protokoll-Parser und den Generator. Der neue Kunde verbessert die Leistung um einen Faktor von 30%, bettet die Unterstützung von Websocket (MOWS ist jetzt veraltet) ein und hat eine bessere Unterstützung für QoS 1 und 2. Die vorherige API wird weiterhin unterstützt, aber veraltet, als solche ist er in diesem Readme nicht dokumentiert.
npm install mqtt --saveSetzen wir den Abonnenten und den Verlag in die gleiche Datei ein:
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 ( ) ;
} ) ;Ausgabe:
Hello mqttMqtt.js können in reag -nativen Anwendungen verwendet werden. Um es zu verwenden, siehe das native React -Beispiel
Wenn Sie Ihren eigenen MQTT-Broker ausführen möchten, können Sie Mosquitto oder Aedes-Cli verwenden und ihn starten.
Sie können auch eine Testinstanz verwenden: test.mosquitto.org.
Wenn Sie keinen separaten Broker installieren möchten, können Sie versuchen, die Aedes zu verwenden.
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 bündelt einen Befehl zur Interaktion mit einem Broker. Um es auf Ihrem Pfad verfügbar zu machen, sollten Sie mqtt.js global installieren:
npm install mqtt -gDann an einem Terminal
mqtt sub -t ' hello ' -h ' test.mosquitto.org ' -vAuf einem anderen
mqtt pub -t ' hello ' -h ' test.mosquitto.org ' -m ' from MQTT.js ' Siehe mqtt help <command> für die Befehlshilfe.
Mqtt.js verwendet das Debug -Paket für Debugging -Zwecke. Um Debug -Protokolle zu aktivieren, fügen Sie zur Laufzeit die folgende Umgebungsvariable hinzu:
# ( example using PowerShell, the VS Code default )
$env:DEBUG='mqttjs*' Ein wichtiger Bestandteil einer WebSocket -Verbindung ist das, was zu tun ist, wenn eine Verbindung abfällt und der Kunde wieder verbinden muss. MQTT verfügt über integrierte Wiederverbindungsunterstützung, die so konfiguriert werden kann, dass sie sich so verhalten, wie es der Anwendung entspricht.
transformWsUrl (nur WebSocket) aktualisieren (nur WebSocket)Wenn ein MQTT -Verbindungsverbindungsverbindungsverbindungsverbindung wieder hergestellt wird, ist es üblich, dass jede mit der Verbindung verbundene Authentifizierung mit dem zugrunde liegenden Auth -Mechanismus auf dem Laufenden gehalten wird. Zum Beispiel können einige Anwendungen ein Auth -Token mit Verbindungsoptionen für die anfängliche Verbindung übergeben, während andere Cloud -Dienste möglicherweise mit jeder Verbindung eine URL unterschreiben müssen.
Wenn die Wiederverbindung im Anwendungslebenszyklus auftritt, sind die ursprünglichen Auth -Daten möglicherweise abgelaufen.
Um dies zu beheben, können wir einen Haken namens transformWsUrl verwenden, um eine der Verbindungs -URL oder die Client -Optionen zum Zeitpunkt einer Wiederverbindung zu manipulieren.
Beispiel (Aktualisieren Sie ClientID und Benutzername für jede Wiederverbindung):
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 ,
} );Jedes Mal, wenn eine neue WebSocket -Verbindung geöffnet wird (hoffentlich nicht zu oft), erhalten wir eine frische Signed -URL oder frische Auth -Token -Daten.
Hinweis: Derzeit unterstützt dieser Haken keine Versprechen, was bedeutet, dass Sie, um das neueste Auth-Token zu verwenden, einige externe Mechanismus ausführen müssen, die die Authentifizierung auf Anwendungsebene übernimmt, damit die WebSocket-Verbindung einfach das neueste gültige Token oder die signierte URL für die Signifikation erhalten kann.
createWebsocket an (nur WebSocket)Wenn Sie ein benutzerdefiniertes WebSocket -Subprotokoll oder einen Header hinzufügen müssen, um eine Verbindung über einen Proxy mit benutzerdefinierter Authentifizierung zu öffnen, können Sie mit diesem Rückruf eine eigene Instanz eines WebSocket erstellen, das im MQTT -Client verwendet wird.
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 aktivieren Um sicherzustellen, dass der MQTT -Client automatisch versucht, sich wieder zu verbinden, wenn die Verbindung gelöscht wird, müssen Sie die Client -Option reconnectPeriod auf einen Wert von mehr als 0. Ein Wert von 0 deaktiviert die Wiederverbindung und beendet die endgültige Verbindung, wenn sie abfällt.
Der Standardwert beträgt 1000 ms, was bedeutet, dass er 1 Sekunde nach dem Verlust der Verbindung wieder anschließen wird.
Beachten Sie, dass dies nur nach einer Verbindungszeit oder nach einer erfolgreichen Verbindung wiederhergestellt wird. Es wird (standardmäßig) nicht aktiviert, um Verbindungen wiederzuerlangen, die mit einem Connack -Fehler durch den Server aktiv abgelehnt werden.
Um auch automatische Wiederverbindungen für Connack -Fehler zu ermöglichen, setzen Sie reconnectOnConnackError: true .
Wenn der Client die Option autoUseTopicAlias:true festlegt, verwendet MQTT.js vorhandenen Themen -Alias automatisch.
Beispielszenario:
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)Der Benutzer muss nicht verwalten, welches Thema auf welches Thema Alias zugeordnet ist. Wenn der Benutzer Topic Alias registrieren möchte, veröffentlichen Sie das Thema mit dem Themen -Alias. Wenn der Benutzer Themen -Alias verwenden möchte, veröffentlichen Sie ein Thema ohne Themen -Alias. Wenn es einen Alias des zugeordneten Themas gibt, fügte es als Eigenschaft hinzu und aktualisiert das Thema in die leere Zeichenfolge.
Wenn der Client die Option autoAssignTopicAlias:true verwendet MQTT.js automatisch vorhandene Themenalias. Wenn kein Thema Alias vorliegt, weisen Sie automatisch einen neuen freien Thema Alias zu. Wenn das Themen-Alias vollständig verwendet wird, wird LRU (am wenigsten verwendet) Topic-Alias-Eintrag überschrieben.
Beispielszenario:
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)Außerdem kann der Benutzer das Themen-Alias-Paar manuell mit dem Veröffentlichungsthema registrieren: 'Einige', Ta: x. Es funktioniert gut mit dem automatischen Themen -Alias zugewiesen.
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()Verbindet mit dem von der angegebenen URL angegebenen Broker und den Optionen und gibt einen Client zurück.
Die URL kann sich auf den folgenden Protokollen befinden: 'mqtt', 'mqtts', 'tcp', 'tls', 'ws', 'wss', 'wxs', 'alis'. Wenn Sie versuchen, eine Verbindung zu einer UNIX -Socket herzustellen, fügen Sie einfach das +unix -Suffix an das Protokoll an (z. mqtt+unix ). Dadurch wird die unixSocket -Eigenschaft automatisch festgelegt.
Die URL kann auch ein Objekt sein, das von URL.parse() zurückgegeben wird. In diesem Fall werden die beiden Objekte zusammengeführt, dh Sie können ein einzelnes Objekt sowohl mit der URL- als auch mit den Verbindungsoptionen übergeben.
Sie können auch servers -Optionen mit Inhalten angeben: [{ host: 'localhost', port: 1883 }, ... ] , in diesem Fall wird das Array bei jeder Verbindung iteriert.
Für alle Optionen für MQTT-bezogene Optionen finden Sie im Client-Konstruktor.
Asynchrone Wrapper um die connect .
Gibt ein Promise zurück, das sich auf eine mqtt.Client -Instanz auflöst, wenn der Client ein Ereignis 'connect' oder 'end' abfängt, oder lehnt einen Fehler ab, wenn der 'error' abgefeuert wird.
Beachten Sie, dass die Option manualConnect dazu führt, dass das von dieser Funktion zurückgegebene Versprechen niemals auflöst oder ablehnt, da der zugrunde liegende Client niemals Ereignisse ausfeuert.
Die Client -Klasse wechselt eine Client -Verbindung zu einem MQTT -Broker über eine beliebige Transportmethode (TCP, TLS, WebSocket, ECC). Client ist ein Eventemitter, der seine eigenen Ereignisse hat
Client behandelt automatisch Folgendes:
Die Argumente sind:
streamBuilder ist eine Funktion, die eine Unterklasse der Stream -Klasse zurückgibt, die das connect -Ereignis unterstützt. Typischerweise ein net.Socket .options sind die Client -Verbindungsoptionen (siehe: Das Paket anschließen). Standardeinstellungen: wsOptions : Ist die WebSocket -Verbindungsoptionen. Standard ist {} . Es ist spezifisch für Websockets. Mögliche Optionen finden Sie unter: https://github.com/websockets/ws/blob/master/doc/ws.md.
keepalive : 60 Sekunden, auf 0 gesetzt, um zu deaktivieren
reschedulePings : Ping -Nachrichten nach dem Senden von Paketen verschieben (Standard true )
clientId : 'mqttjs_' + Math.random().toString(16).substr(2, 8)
protocolId : 'MQTT'
protocolVersion : 4
clean : true , auf False eingestellt, um QoS 1 und 2 Nachrichten während der Offline zu empfangen
reconnectPeriod : 1000 Millisekunden, Intervall zwischen zwei Wiederverbindungen. Deaktivieren Sie die automatische Verbindung, indem Sie auf 0 einstellen.
reconnectOnConnackError : false , ob auch eine Verbindung hergestellt werden soll, wenn ein Connack mit einem Fehler empfangen wird.
connectTimeout : 30 * 1000 Millisekunden, Zeit zum Warten, bevor ein Connack empfangen wird
username : Der Benutzername, der von Ihrem Broker erforderlich ist, falls vorhanden
password : Das von Ihrem Broker erforderliche Passwort, falls vorhanden
incomingStore : Ein Geschäft für die eingehenden Pakete
outgoingStore : Ein Geschäft für die ausgehenden Pakete
queueQoSZero : Wenn die Verbindung unterbrochen ist, können Sie die Queue -Ausgangsmeldungen ausgehört (Standard true ).
customHandleAcks : MQTT 5 -Funktion von benutzerdefinierten Pubsack- und PubRec -Paketen. Sein Rückruf:
customHandleAcks: function ( topic , message , packet , done ) { /*some logic with calling done(error, reasonCode)*/ } autoUseTopicAlias : Ermöglichen Sie den automatischen Themenalias mithilfe von Funktionen
autoAssignTopicAlias : Aktivieren automatischer Themen -Alias -Funktionalität zuweisen
properties : Eigenschaften MQTT 5.0. object , das die folgenden Eigenschaften unterstützt:
sessionExpiryInterval : Darstellung des Ablaufintervalls der Sitzung in number ,receiveMaximum : Darstellung der number ,maximumPacketSize : Darstellung der maximalen Paketgröße, die der Kunde bereit ist, number zu akzeptieren,topicAliasMaximum : Darstellung des Maximalwerts des Themas zeigt den höchsten Wert an, den der Client als Thema Alias akzeptiert, die von der number gesendet werden.requestResponseInformation : Der Client verwendet diesen Wert, um den Server aufzufordern, Antwortinformationen im Connack boolean zurückzugeben.requestProblemInformation : Der Client verwendet diesen Wert, um anzugeben, ob der Grundzeichenfolge oder die Benutzereigenschaften im Fall von Failures boolean gesendet werden.userProperties : Die Benutzereigenschaft darf mehrmals angezeigt werden, um mehrere Namen, Value Pairs object , darzustellen.authenticationMethod : Der Name der Authentifizierungsmethode für erweiterte string ,authenticationData : Binäre Daten, die Authentifizierungsdaten binary Daten enthalten authPacket : Einstellungen für das Auth object
will : Eine Nachricht, die vom Broker automatisch gesendet wird, wenn der Client die Verbindung schlecht trennen wird. Das Format lautet:
topic : Das Thema zu veröffentlichenpayload : Die zu veröffentlichenqos : die QoSretain : die Halteflaggeproperties : Eigenschaften des Willens von MQTT 5.0:willDelayInterval : Darstellung des Willensverzögerungsintervalls in number ,payloadFormatIndicator : Die Meldung ist UTF-8 codierte Zeichendaten oder nicht boolean ,messageExpiryInterval : Wert ist die Lebensdauer der WILL -Nachricht in Sekunden und wird als Veröffentlichungsintervall gesendet, wenn der Server die WILL number veröffentlicht.contentType : Beschreiben Sie den Inhalt der string ,responseTopic : String, der als string für eine Antwortmeldungszeichenfolge verwendet wird,correlationData : Die Korrelationsdaten werden vom Absender der Anforderungsnachricht verwendet, um zu identifizieren, welche Anforderung die Antwortnachricht ist, wenn sie binary empfangen wird.userProperties : Die Benutzereigenschaft kann mehrmals angezeigt werden, um mehrere Namen darzustellen, Wertpaare object transformWsUrl : Optional (url, options, client) => url -Funktion nur für WS/WSS -Protokolle. Kann verwendet werden, um Signatur -URLs zu implementieren, die nach einer Wiederverbindung abgelaufen sein können.
createWebsocket : Optionale url, websocketSubProtocols, options) => Websocket -Funktion nur für WS/WSS -Protokolle. Kann verwendet werden, um ein benutzerdefiniertes WebSocket -SubproTocol oder eine Implementierung zu implementieren.
resubscribe : Wenn die Verbindung unterbrochen ist und sich wieder verbindet, werden abonnierte Themen automatisch erneut abonniert (Standard true ).
messageIdProvider : Benutzerdefinierte MessageID -Anbieter. Wenn new UniqueMessageIdProvider() festgelegt ist, wird nicht Konfliktmessage zur Verfügung gestellt.
log : Benutzerdefinierte Protokollfunktion. Standard verwendet Debug -Paket.
manualConnect : verhindert, dass der Konstruktor connect aufnimmt. In diesem Fall, nachdem der mqtt.connect aufgerufen wurde, sollten Sie client.connect manuell anrufen.
timerVariant : Standardeinstellungen zu auto , das versucht, zu bestimmen, welcher Timer für Ihre Umgebung am besten geeignet ist. Wenn Sie Erkennungsprobleme haben, können Sie es an worker oder native einstellen. Wenn keiner zu Ihnen passt, können Sie ein Timer -Objekt mit festgelegten und klaren Eigenschaften übergeben:
timerVariant: {
set : ( func , timer ) => setInterval ( func , timer ) ,
clear : ( id ) => clearInterval ( id )
} forceNativeWebSocket : Setzen Sie sich auf wahr, wenn Sie Erkennungsprobleme haben (dh das ws does not work in the browser -Ausnahme), um die Verwendung von nativem WebSocket zu erzwingen. Es ist wichtig zu beachten, dass alle Clients native WebSocket verwenden, wenn sie für den ersten Client erstellt wurden. Und umgekehrt, wenn nicht, wenn nicht auf False festgelegt, werden alle das Erkennungsergebnis verwendet.
unixSocket : Wenn Sie eine Verbindung zu einem UNIX -Socket herstellen möchten, stellen Sie diese auf true ein
Falls MQTTS (MQTT Over TLS) erforderlich ist, wird das options an tls.connect() übergeben. Wenn Sie ein selbstsigniertes Zertifikat verwenden, setzen Sie rejectUnauthorized: false . Seien Sie jedoch vorsichtig, da dies Sie potenzieller Mann bei den mittleren Angriffen aussetzt und nicht für die Produktion empfohlen wird.
Verwenden Sie für diejenigen, die mehrere TLS -Protokolle an einem einzigen Port wie MQTTS und MQTT über WSS unterstützen, die Option ALPNProtocols . Auf diese Weise können Sie das ALPN -Protokoll (Anwendungsschichtprotokollverhandlung) definieren. Sie können ALPNProtocols als Zeichenfolgenarray, Puffer oder Uint8Array basierend auf Ihrem Setup festlegen.
Wenn Sie eine Verbindung zu einem Broker herstellen, der nur MQTT 3.1 (nicht 3.1.1 -konform) unterstützt, sollten Sie diese zusätzlichen Optionen übergeben:
{
protocolId : 'MQIsdp' ,
protocolVersion : 3
}Dies wird auf Rabbitmq 3.2.4 und auf Mosquitto <1,3 bestätigt. Mosquitto Version 1.3 und 1.4 funktioniert ohne diese einwandfrei.
'connect' function (connack) {}
Emittiert auf erfolgreiche (re) Verbindung (dh Connack RC = 0).
connack empfing Connack Paket. Wenn die Option clean Connection false ist und der Server eine vorherige Sitzung für clientId -Verbindungsoption hat, ist connack.sessionPresent Flag true . In diesem Fall können Sie sich auf die gespeicherte Sitzung verlassen und es vorziehen, keine Abonnementbefehle für den Client zu senden. 'reconnect' function () {}
Emittiert, wenn eine Wiederverbindung beginnt.
'close' function () {}
Nach einer Trennung emittiert.
'disconnect' function (packet) {}
Emittiert, nachdem sie vom Broker Trennpaket erhalten haben. MQTT 5.0 -Funktion.
'offline' function () {}
Emittiert, wenn der Kunde offline geht.
'error' function (error) {}
Emittiert, wenn der Client keine Verbindung herstellen kann (dh Connack rc! = 0) oder wenn ein Parsenfehler auftritt.
Die folgenden TLS -Fehler werden als error ausgegeben:
ECONNREFUSEDECONNRESETEADDRINUSEENOTFOUND'end' function () {}
Emittiert, wenn mqtt.Client#end() aufgerufen wird. Wenn ein Rückruf an mqtt.Client#end() übergeben wurde, wird dieses Ereignis nach dem Rückgaberückgang ausgestrahlt.
'message' function (topic, message, packet) {}
Emittiert, wenn der Client ein Veröffentlichungspaket erhält
topic Thema des empfangenen Paketsmessage des empfangenen Paketspacket empfangenes Paket wie in MQTT-Packet definiert 'packetsend' function (packet) {}
Emittiert, wenn der Kunde ein Paket sendet. Dies umfasst .Publiered () Pakete sowie Pakete, die von MQTT zum Verwalten von Abonnements und Verbindungen verwendet werden
packet empfangenes Paket wie in MQTT-Packet definiert 'packetreceive' function (packet) {}
Emittiert, wenn der Client ein Paket erhält. Dies umfasst Pakete von abonnierten Themen sowie von MQTT verwendete Pakete zum Verwalten von Abonnements und Verbindungen
packet empfangenes Paket wie in MQTT-Packet definiert Standardmäßig eine Verbindung herstellt, wenn der Konstruktor aufgerufen wird. Um dies zu verhindern, können Sie eine manualConnect -Option auf true festlegen und client.connect() manuell aufrufen.
Veröffentlichen Sie eine Nachricht an ein Thema
topic ist das Thema zu veröffentlichen, Stringmessage ist die Nachricht zum Veröffentlichen, Buffer oder Stringoptions sind die Optionen, mit denen Sie veröffentlichen können, einschließlich:qos QoS -Ebene, Number , Standard 0retain Boolean falsedup -Marke als doppelte Flagge, Boolean , Standard falseproperties : MQTT 5.0 objectpayloadFormatIndicator : Nutzlast ist UTF-8-codierte Zeichendaten oder nicht boolean ,messageExpiryInterval : Die Lebensdauer der Anwendungsnachricht in Sekunden number ,topicAlias : Wert, der verwendet wird, um das Thema zu identifizieren, anstatt die Themenname number zu verwenden.responseTopic : String, der als string für eine Antwortmeldungszeichenfolge verwendet wird,correlationData : Wird vom Absender der Anforderungsnachricht verwendet, um zu identifizieren, welche Anforderung die Antwortnachricht ist, wenn sie binary empfangen wird,userProperties : Die Benutzereigenschaft darf mehrmals angezeigt werden, um mehrere Namen, Value Pairs object , darzustellen.subscriptionIdentifier : Darstellung der Kennung der number ,contentType : String, in dem der Inhalt der Application string beschrieben wirdcbStorePut - function () , abgefeuert, wenn die Nachricht in outgoingStore eingefügt wird, wenn QoS 1 oder 2 ist.callback - function (err, packet) , abgefeuert, wenn das QoS -Handling abgeschlossen ist, oder bei der nächsten Häkchen, wenn QoS 0. Ein Fehler auftritt, wenn der Client die Verbindung trennen. publish . Gibt ein Promise<Packet | undefined> .
messageId -Eigenschaft hat.Abonnieren Sie ein Thema oder Themen
topic ist ein String -Thema, das Sie sich abonnieren oder eine Array von Themen abonnieren müssen. Es kann auch ein Objekt sein, es hat als Objektschlüssel den Themennamen und als Wert die QoS wie {'test1': {qos: 0}, 'test2': {qos: 1}} . MQTT topic Wildcard -Charaktere werden unterstützt ( + - für einstufe und # - für Multi -Level)options sind die Optionen zum Abonnieren, einschließlich:qos QoS -Abonnementstufe, Standard 0nl NO LOCAL MQTT 5.0 Flag (wenn der Wert true, dürfen Anwendungsnachrichten nicht an eine Verbindung mit einer ClientID weitergeleitet werden, die der ClientID der Veröffentlichungsverbindung entspricht)rap behält sich als veröffentlichtes MQTT 5.0 -Flag (falls wahr, Anwendungsnachrichten mit diesem Abonnement weitergeleitet, halten Sie das Retain -Flag, mit dem sie veröffentlicht wurden. Wenn Sie falsch sind.rh beibehalten der Handhabung MQTT 5.0 (Diese Option gibt an, ob beibehaltene Nachrichten bei der Erstellung des Abonnements gesendet werden.)properties : objectsubscriptionIdentifier : Darstellung der Kennung der number ,userProperties : Die Benutzereigenschaft kann mehrmals angezeigt werden, um mehrere Namen darzustellen, Wertpaare objectcallback - function (err, granted) Rückruf auf Suback, wobei:err ein Abonnementfehler oder ein Fehler, der auftritt, wenn der Client die Verbindung trennengranted ist eine Reihe von {topic, qos} Wobei:topic ist ein Thema, das das Thema abonniert hatqos ist das gewährte QoS -Level darauf Asynchronen subscribe . Gibt ein Promise<ISubscriptionGrant[]> .
Abbestellen von einem Thema oder Themen abmelden
topic ist ein String -Thema oder eine Reihe von Themen, von denen man sich abmelden kannoptions : Optionen von Abmelden.properties : objectuserProperties : Die Benutzereigenschaft kann mehrmals angezeigt werden, um mehrere Namen darzustellen, Wertpaare objectcallback - function (err) , auf Unsuback abgefeuert. Ein Fehler tritt auf, wenn der Client die Verbindung trennen. Async unsubscribe . Gibt ein Promise<void> .
Schließen Sie den Kunden, akzeptiert die folgenden Optionen:
force : Wenn Sie es an True weitergeben, schließen Sie den Client sofort, ohne darauf zu warten, dass die Bordmeldungen während des Fluges verprügelt werden. Dieser Parameter ist optional.options : Optionen der Trennung.reasonCode : Vernunft -Code number abschließenproperties : objectsessionExpiryInterval : Darstellung des Ablaufintervalls der Sitzung in number ,reasonString : Darstellung des Grundes für die string ,userProperties : Die Benutzereigenschaft darf mehrmals angezeigt werden, um mehrere Namen, Value Pairs object , darzustellen.serverReference : String, die vom Client verwendet werden kann, um einen anderen Server für die Verwendung string zu identifizierencallback : Wird aufgerufen, wenn der Kunde geschlossen ist. Dieser Parameter ist optional. Asynchrisches end . Gibt ein Promise<void> .
Entfernen Sie eine Nachricht aus dem Ausklangstore. Der ausgehende Rückruf wird mit Fehler aufgerufen ('Nachricht entfernt'), wenn die Nachricht entfernt wird.
Nachdem diese Funktion aufgerufen wurde, wird die MessageID freigegeben und wiederverwendbar.
mId : Die MessageID der Nachricht im Ausgangsstrich.Verbinden Sie erneut die gleichen Optionen wie Connect ()
Behandeln Sie Nachrichten mit Backdruckunterstützung nacheinander. Überschreiben Sie nach Belieben, aber rufen Sie immer callback , sonst hängt der Kunde.
Boolean: auf true festgelegt, wenn der Client verbunden ist. false .
Nummer: Holen Sie sich die letzte Nachrichten -ID. Dies gilt nur für gesendete Nachrichten.
Boolean: Setzen Sie auf true , wenn der Client versucht, sich wieder mit dem Server zu verbinden. false .
In-Memory-Implementierung des Message Store.
options sind die Store -Optionen:clean : true , saubere Inflight -Nachrichten, wenn die Schließung aufgerufen wird ( true ) Andere Implementierungen von mqtt.Store :
Fügt dem Geschäft ein Paket hinzu, ein Paket ist alles, was eine messageId -Eigenschaft hat. Der Rückruf wird aufgerufen, wenn das Paket gespeichert wurde.
Erstellt einen Stream mit allen Paketen im Laden.
Entfernt ein Paket aus dem Geschäft, ein Paket ist alles, was eine messageId -Eigenschaft hat. Der Rückruf wird aufgerufen, wenn das Paket entfernt wurde.
Schließt den Laden.
Wichtig
Das einzige Protokoll, das in Browsern unterstützt wird, ist MQTT über WebSockets. Sie müssen also ws:// oder wss:// Protokolle verwenden.
Während das WS -Modul in NodeJs verwendet wird, wird WebSocket in Browsern verwendet. Dies ist für Benutzer völlig transparent, mit Ausnahme der folgenden:
Die wsOption wird in Browsern nicht unterstützt.
Browser erlaubt nicht, aus Sicherheitsgründen viele WebSocket -Fehler zu fangen, als:
Durch den Zugriff auf diese Informationen kann eine böswillige Webseite Informationen über Ihr Netzwerk erhalten, damit Browser alle Verbindungszeitfehler auf ununterscheidbare Weise melden.
Das Anhören von client.on('error') kann nicht alle Fehler aufnehmen, die Sie in NodeJS Env bekommen würden.
Mqtt.js wird mit Esbuild gebündelt. Es wird getestet und arbeitet mit allen Bundlern wie Webpack, Vite und React.
Sie finden alle Versionen von MQTT -Bündeln im dist -Ordner:
mqtt.js - IIFE -Format, nicht abgebrochenmqtt.min.js - iife Format, abgebrochenmqtt.esm.js - ESM -Format MinificfizedAb mqtt.js> 5.2.0 können Sie MQTT in Ihren Code wie folgt importieren:
import mqtt from 'mqtt'Dies wird automatisch von Ihrem Bundler behandelt.
Andernfalls können Sie ein bestimmtes Bundle verwenden wie:
import * as mqtt from 'mqtt/dist/mqtt'
import * as mqtt from 'mqtt/dist/mqtt.min'
import mqtt from 'mqtt/dist/mqtt.esm'Das Mqtt.js -Bundle ist über http://unpkg.com erhältlich, speziell unter https://unpkg.com/mqtt/dist/mqtt.min.js. In http://unpkg.com finden Sie die vollständige Dokumentation zu Versionsbereichen.
So funktioniert QoS:
Über den Datenverbrauch, natürlich QoS 2> QoS 1> QoS 0, wenn das ein Problem für Sie ist.
Ab V5 ist dieses Projekt in TypeScript geschrieben und die Typdefinitionen sind im Paket enthalten.
Beispiel:
import { connect } from "mqtt"
const client = connect ( 'mqtt://test.mosquitto.org' ) Unterstützt das WeChat Mini -Programm. Verwenden Sie das wxs -Protokoll. Siehe die WeChat -Dokumente.
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
} ) ; Unterstützt das Ali Mini -Programm. Verwenden Sie das alis -Protokoll. Siehe die Alipay -Dokumente.
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "alis://test.mosquitto.org" ) ; Mqtt.js ist ein Open -Source -Projekt . Das bedeutet, dass:
Personen, die erhebliche und wertvolle Beiträge leisten, erhalten das Projekt, um den Beitrag zu leisten, wie sie es für richtig halten. Dieses Projekt ähnelt eher ein offenes Wiki als ein Standardprojekt mit Standard -bewachtem Open -Source -Projekt.
Weitere Details finden Sie in der Datei mit beitragen.md.
Mqtt.js ist nur aufgrund der hervorragenden Arbeit der folgenden Mitwirkenden möglich:
| Name | Github | |
|---|---|---|
| Adam Rudd | Github/Adamvr | Twitter/@adam_vr |
| Matteo Collina | Github/Mcollina | Twitter/@Matteocollina |
| Maxime Agor | Github/4rzael | Twitter/@4rzael |
| Siarhei Buntsevich | Github/sarry1992 | |
| Daniel Lando | Github/Robertslando |
Wenn Sie mqtt.js unterstützen möchten, sollten Sie den Autor und die aktiven Betreuer sponsern:
MIT