MQTT.JS es una biblioteca de clientes para el protocolo MQTT, escrito en JavaScript para Node.js y el navegador.
MQTT.JS es un proyecto de código abierto abierto, consulte la sección contribuyente para averiguar qué significa esto.
v5.0.0 (07/2023)
MqttClient ahora se requiere new .V4.0.0 (lanzado 04/2020) elimina el soporte para todas las versiones del nodo final de la vida, y ahora admite el nodo V12 y V14. También agrega mejoras al registro de depuración, junto con algunas adiciones de características.
Como cambio de ruptura , de manera predeterminada, un controlador de errores está integrado en el cliente MQTT.JS, por lo que si se emiten errores y el usuario no ha creado un controlador de eventos en el cliente para obtener errores, el cliente no se romperá como resultado de errores no controlados. Además, los errores típicos de TLS como ECONNREFUSED , ECONNRESET se han agregado a una lista de errores TLS que se emitirán desde el cliente MQTT.JS, y por lo tanto se pueden manejar como errores de conexión.
V3.0.0 agrega soporte para MQTT 5, soporte para el nodo V10.X y muchas correcciones para mejorar la confiabilidad.
Nota: El soporte MQTT V5 es experimental, ya que aún no ha sido implementado por los corredores.
V2.0.0 elimina el soporte para el nodo V0.8, V0.10 y V0.12, y es 3 veces más rápido en el envío de paquetes. También elimina toda la funcionalidad en desuso en V1.0.0, principalmente mqtt.createConnection y mqtt.Server . Desde V2.0.0, las suscripciones se restauran tras la reconexión si clean: true . V1.XX ahora está en LTS , y seguirá siendo compatible siempre que haya usuarios V0.8, V0.10 y V0.12.
Como cambio de ruptura , se elimina la opción encoding en el cliente anterior, y ahora todo es UTF-8 con la excepción de la password en el mensaje de conexión y payload en el mensaje Publish, que son Buffer .
Otro cambio de ruptura es que MQTT.JS ahora es predeterminado a MQTT V3.1.1, por lo que para admitir los antiguos corredores, lea el Doc de Opciones del Cliente.
V1.0.0 mejora la arquitectura general del proyecto, que ahora se divide en tres componentes: MQTT.JS mantiene al cliente, la conexión MQTT incluye el código de conexión Barebone para el uso del lado del servidor, y MQTT-Packet incluye el analizador de protocolo y el generador. El nuevo cliente mejora el rendimiento en un factor del 30%, incorpora el soporte de WebSocket (Mows ahora está en desuso), y tiene un mejor soporte para QoS 1 y 2. La API anterior todavía es compatible pero desaprobada, como tal, no está documentado en este readme.
npm install mqtt --saveEn aras de la simplicidad, pongamos el suscriptor y el editor en el mismo archivo:
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 ( ) ;
} ) ;producción:
Hello mqttMQTT.JS se puede usar en aplicaciones nativas React. Para usarlo, vea el ejemplo de React Native
Si desea ejecutar su propio corredor MQTT, puede usar Mosquitto o Aedes-Cli, y lanzarlo.
También puede usar una instancia de prueba: test.nosquitto.org.
Si no desea instalar un corredor separado, puede intentar usar los Aedes.
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 BUNDA un comando para interactuar con un corredor. Para tenerlo disponible en su ruta, debe instalar MQTT.js a nivel mundial:
npm install mqtt -gEntonces, en un terminal
mqtt sub -t ' hello ' -h ' test.mosquitto.org ' -vEn otro
mqtt pub -t ' hello ' -h ' test.mosquitto.org ' -m ' from MQTT.js ' Consulte mqtt help <command> para obtener la ayuda del comando.
MQTT.JS utiliza el paquete de depuración para fines de depuración. Para habilitar los registros de depuración, agregue la siguiente variable de entorno en tiempo de ejecución:
# ( example using PowerShell, the VS Code default )
$env:DEBUG='mqttjs*' Una parte importante de cualquier conexión WebSocket es qué hacer cuando una conexión se cae y el cliente necesita volver a conectarse. MQTT tiene soporte de reconexión incorporado que se puede configurar para comportarse de manera que se adapte a la aplicación.
transformWsUrl (solo WebSocket)Cuando una conexión MQTT cae y necesita volver a conectarse, es común exigir que cualquier autenticación asociada con la conexión se mantenga actualizada con el mecanismo de autenticación subyacente. Por ejemplo, algunas aplicaciones pueden pasar un token de autenticación con opciones de conexión en la conexión inicial, mientras que otros servicios en la nube pueden requerir que se firmen una URL con cada conexión.
Para cuando la reconexión ocurre en el ciclo de vida de la aplicación, los datos de autores originales pueden haber expirado.
Para abordar esto, podemos usar un gancho llamado transformWsUrl para manipular la URL de conexión o las opciones del cliente en el momento de una reconexión.
Ejemplo (actualizar ClientID y nombre de usuario en cada reconectación):
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 ,
} );Ahora, cada vez que se abre una nueva conexión WebSocket (con suerte no con demasiada frecuencia), obtendremos una URL firmada recién firmada o datos de token de autenticación frescos.
Nota: Actualmente, este gancho no admite promesas, lo que significa que para usar el último token de autenticación, debe tener algún mecanismo externo que se ejecute que maneja la autenticación a nivel de aplicación que se actualiza para que la conexión WebSocket simplemente pueda obtener el último token válido o URL firmada.
createWebsocket (solo WebSocket)Cuando necesita agregar un subprotocolo o encabezado de WebSocket personalizado para abrir una conexión a través de un proxy con autenticación personalizada, esta devolución de llamada le permite crear su propia instancia de un WebSocket que se utilizará en el cliente 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 Para asegurarse de que el cliente MQTT intente volver a conectarse cuando se caiga la conexión, debe establecer la opción del cliente reconnectPeriod a un valor superior a 0. Un valor de 0 deshabilitará la reconexión y luego terminará la conexión final cuando caiga.
El valor predeterminado es de 1000 ms, lo que significa que intentará reconectarse 1 segundo después de perder la conexión.
Tenga en cuenta que esto solo habilitará reconects después de un tiempo de espera de conexión o después de una conexión exitosa. No habilitará (por defecto) el reintento de conexiones que se niegan activamente con un error de Connack por parte del servidor.
Para habilitar también las reconects automáticas para los errores de Connack, establezca reconnectOnConnackError: true .
Si el cliente establece la opción autoUseTopicAlias:true , entonces MQTT.JS usa alias de tema existente automáticamente.
Ejemplo de escenario:
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)El usuario no necesita administrar qué tema está asignado a qué tema de alias. Si el usuario desea registrar alias de tema, publique el tema con el alias de temas. Si el usuario desea usar alias de tema, publique tema sin alias de tema. Si hay un alias de tema asignado, agregue como propiedad y actualice el tema en cadena vacía.
Si el cliente establece la opción autoAssignTopicAlias:true , entonces MQTT.JS usa alias de tema existente automáticamente. Si no existe alias de tema, asigne automáticamente un nuevo alias de tema vacante. Si se usa completamente el alias del tema, entonces la entrada de Topic-Alias LRU (menos recientemente) se sobrescribe.
Ejemplo de escenario:
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)Además, el usuario puede registrar manualmente el par de temas-alias utilizando el tema de publicación: 'algunos', TA: x. Funciona bien con la asignación automática de alias de tema.
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 conecta al corredor especificado por la URL y las opciones dadas y devuelve un cliente.
La URL puede estar en los siguientes protocolos: 'mqtt', 'mqtts', 'tcp', 'tls', 'ws', 'wss', 'wxs', 'alis'. Si está intentando conectarse a un socket Unix, simplemente agregue el sufijo +unix al protocolo (Ej: mqtt+unix ). Esto establecerá la propiedad unixSocket automáticamente.
La URL también puede ser un objeto devuelto por URL.parse() , en ese caso, los dos objetos se fusionan, es decir, puede pasar un solo objeto con la URL y las opciones de conexión.
También puede especificar las opciones de un servers con contenido: [{ host: 'localhost', port: 1883 }, ... ] , en ese caso que la matriz se itera en cada conexión.
Para todas las opciones relacionadas con MQTT, consulte el constructor del cliente.
Envoltura asíncrona alrededor de la función connect .
Devuelve una Promise que se resuelve a una instancia mqtt.Client cuando el cliente dispara un evento 'connect' o 'end' , o rechaza con un error si se dispara el 'error' .
Tenga en cuenta que la opción manualConnect hará que la promesa devuelta por esta función nunca resuelva o rechace, ya que el cliente subyacente nunca dispara ningún evento.
La clase Client envuelve una conexión de cliente a un corredor MQTT sobre un método de transporte arbitrario (TCP, TLS, WebSocket, ECC). Client es un EventEmister que tiene sus propios eventos
Client maneja automáticamente lo siguiente:
Los argumentos son:
streamBuilder es una función que devuelve una subclase de la clase de Stream que admite el evento connect . Típicamente un net.Socket .options son las opciones de conexión del cliente (consulte: el paquete de conexión). Valores predeterminados: wsOptions : son las opciones de conexión de WebSocket. El valor predeterminado es {} . Es específico para WebSockets. Para ver posibles opciones, eche un vistazo a: https://github.com/websockets/ws/blob/master/doc/ws.md.
keepalive : 60 segundos, establecido en 0 para deshabilitar
reschedulePings : reprogramar mensajes de ping después de enviar paquetes (predeterminado true )
clientId : 'mqttjs_' + Math.random().toString(16).substr(2, 8)
protocolId : 'MQTT'
protocolVersion : 4
clean : true , establecido en falso para recibir mensajes Qos 1 y 2 mientras está fuera de línea
reconnectPeriod : 1000 milisegundos, intervalo entre dos reconexiones. Deshabilite Auto Reconectado mediante la configuración de 0 .
reconnectOnConnackError : false , si también se debe reconectar si se recibe un Connack con un error.
connectTimeout : 30 * 1000 milisegundos, es hora de esperar antes de que se reciba un Connack
username : el nombre de usuario requerido por su corredor, si lo hay
password : la contraseña requerida por su corredor, si es que
incomingStore : una tienda para los paquetes entrantes
outgoingStore : una tienda para los paquetes salientes
queueQoSZero : si la conexión se rompe, cola mensajes QOS cero salientes (predeterminado true )
customHandleAcks : MQTT 5 característica de los paquetes Puback y PubREC de manejo personalizado. Su devolución de llamada:
customHandleAcks: function ( topic , message , packet , done ) { /*some logic with calling done(error, reasonCode)*/ } autoUseTopicAlias : habilitando alias de tema automático utilizando la funcionalidad
autoAssignTopicAlias : habilitando alias de temas automáticos Asignar funcionalidad
properties : Propiedades MQTT 5.0. object que admite las siguientes propiedades:
sessionExpiryInterval : representando el intervalo de vencimiento de la sesión en number de segundos,receiveMaximum : representar el number de valor máximo de recepción,maximumPacketSize : representando el tamaño máximo del paquete El cliente está dispuesto a aceptar number ,topicAliasMaximum : Representar el valor máximo de alias del tema indica el valor más alto que el cliente aceptará como un alias de tema enviado por el number de servidor,requestResponseInformation : el cliente usa este valor para solicitar al servidor que devuelva la información de respuesta en el boolean de Connack,requestProblemInformation : el cliente usa este valor para indicar si las propiedades de las cadenas de razón o el usuario se envían en el caso de fallas boolean ,userProperties : la propiedad del usuario puede aparecer varias veces para representar múltiples nombres, object de pares de valor,authenticationMethod : el nombre del método de autenticación utilizado para string de autenticación extendida,authenticationData : datos binarios que contienen datos de autenticación binary authPacket : Configuración para object de paquete de autores
will : Un mensaje que enviará automáticamente el corredor cuando el cliente se desconecte mal. El formato es:
topic : el tema para publicarpayload : el mensaje para publicarqos : el QoSretain : la bandera de retenciónproperties : Propiedades de voluntad por MQTT 5.0:willDelayInterval : representar el intervalo de retraso de Will en number de segundos,payloadFormatIndicator : Will Mensaje es UTF-8 Datos de caracteres codificados o no boolean ,messageExpiryInterval : Value es la vida útil del mensaje de Will en segundos y se envía como el intervalo de cadena de publicación cuando el servidor publica el number de mensaje de Will,contentType : describiendo el contenido de la string de mensajes de voluntad,responseTopic : cadena que se usa como nombre del tema para una string de mensaje de respuesta,correlationData : el remitente del mensaje del mensaje de solicitud utiliza los datos de correlación para identificar para qué solicitud es el mensaje de respuesta para cuándo se recibe binary ,userProperties : se permite que la propiedad del usuario aparezca varias veces para representar múltiples nombres, pares de valores object transformWsUrl : Opcional (url, options, client) => url solo para protocolos WS/WSS. Se puede utilizar para implementar URL de firma que al reconectar pueden haber expirado.
createWebsocket : url, websocketSubProtocols, options) => Websocket solo para protocolos WS/WSS. Se puede utilizar para implementar un subprotocolo o implementación de WebSocket personalizado.
resubscribe : si la conexión se rompe y se vuelve a conectar, los temas suscritos se suscriben automáticamente nuevamente (predeterminado true )
messageIdProvider : proveedor personalizado de MessageID. Cuando se establece new UniqueMessageIdProvider() , entonces no se proporciona un mensaje de mensajes no conflicto.
log : función de registro personalizado. Predeterminado utiliza el paquete de depuración.
manualConnect : evita que el constructor llame a connect . En este caso, después de que se llame mqtt.connect , debe llamar client.connect manualmente.
timerVariant : el valor predeterminado a auto , que intenta determinar qué temporizador es más apropiado para su entorno, si tiene problemas de detección, puede configurarlo en worker o native . Si ninguno le conviene, puede pasar un objeto de temporizador con propiedades establecidas y claras:
timerVariant: {
set : ( func , timer ) => setInterval ( func , timer ) ,
clear : ( id ) => clearInterval ( id )
} forceNativeWebSocket : Establezca en verdadero si tiene problemas de detección (es decir, el ws does not work in the browser ) para forzar el uso de WebSocket nativo. Es importante tener en cuenta que si se establece en True para el primer cliente creado, entonces todos los clientes usarán WebSocket nativo. Y por el contrario, si no se establece o establece en False, todos usará el resultado de detección.
unixSocket : si desea conectarse a un socket Unix, configure esto en verdad
En caso de que se requiere MQTTS (MQTT sobre TLS), el objeto options se pasa a tls.connect() . Si usa un certificado autofirmado , establezca rejectUnauthorized: false . Sin embargo, tenga cuidado ya que esto lo expone al hombre potencial en los ataques medios y no se recomienda para la producción.
Para aquellos que admiten múltiples protocolos TLS en un solo puerto, como MQTTS y MQTT sobre WSS, utilice la opción ALPNProtocols . Esto le permite definir el protocolo de negociación del protocolo de la capa de aplicación (ALPN). Puede establecer ALPNProtocols como una matriz de cadenas, buffer o Uint8Array en función de su configuración.
Si se está conectando a un corredor que solo admite MQTT 3.1 (no compatible con 3.1.1), debe aprobar estas opciones adicionales:
{
protocolId : 'MQIsdp' ,
protocolVersion : 3
}Esto se confirma en RabbitMQ 3.2.4, y en mosquitto <1.3. Mosquitto versión 1.3 y 1.4 funciona bien sin ellos.
'connect' function (connack) {}
Emitido en una conexión exitosa (re) (es decir, connack rc = 0).
connack recibió el paquete Connack. Cuando la opción de conexión clean es false y el servidor tiene una sesión anterior para la opción de conexión clientId , entonces connack.sessionPresent Bandd es true . Cuando ese es el caso, puede confiar en la sesión almacenada y preferir no enviar comandos de suscripción para el cliente. 'reconnect' function () {}
Emitido cuando comienza una reconexión.
'close' function () {}
Emitido después de una desconexión.
'disconnect' function (packet) {}
Emitido después de recibir el paquete de desconexión del corredor. Característica MQTT 5.0.
'offline' function () {}
Emitido cuando el cliente se desconecta.
'error' function (error) {}
Emitido cuando el cliente no puede conectarse (es decir, connack rc! = 0) o cuando ocurre un error de análisis.
Los siguientes errores de TLS se emitirán como un evento error :
ECONNREFUSEDECONNRESETEADDRINUSEENOTFOUND'end' function () {}
Emitido cuando se llama mqtt.Client#end() . Si se pasó una devolución de llamada a mqtt.Client#end() , este evento se emite una vez que la devolución de llamada regresa.
'message' function (topic, message, packet) {}
Emitido cuando el cliente recibe un paquete de publicación
topic tema del paquete recibidomessage del paquete recibidopacket recibido paquete, como se define en el paquete MQTT 'packetsend' function (packet) {}
Emitido cuando el cliente envía cualquier paquete. Esto incluye paquetes .published (), así como paquetes utilizados por MQTT para administrar suscripciones y conexiones
packet recibido paquete, como se define en el paquete MQTT 'packetreceive' function (packet) {}
Emitido cuando el cliente recibe cualquier paquete. Esto incluye paquetes de temas suscritos, así como paquetes utilizados por MQTT para administrar suscripciones y conexiones.
packet recibido paquete, como se define en el paquete MQTT Por defecto, el cliente se conecta cuando se llama al constructor. Para evitar esto, puede establecer la opción manualConnect a true y llamar client.connect() manualmente.
Publicar un mensaje a un tema
topic es el tema para publicar, Stringmessage es el mensaje para publicar, Buffer o Stringoptions son las opciones para publicar, que incluyen:qos QoS, Number , predeterminado 0retain la bandera de retención, Boolean , predeterminado falsedup Mark como bandera duplicada, Boolean , predeterminado falseproperties : object MQTT 5.0 PropiedadespayloadFormatIndicator : la carga útil es UTF-8 Datos de caracteres codificados o no boolean ,messageExpiryInterval : la vida útil del mensaje de la aplicación en number de segundos,topicAlias : valor que se utiliza para identificar el tema en lugar de usar el number de nombre del tema,responseTopic : cadena que se usa como nombre del tema para una string de mensaje de respuesta,correlationData : utilizado por el remitente del mensaje de solicitud para identificar para qué solicitud es el mensaje de respuesta para cuándo se recibe binary ,userProperties : la propiedad del usuario puede aparecer varias veces para representar múltiples nombres, object de pares de valor,subscriptionIdentifier : representar el identificador del number de suscripción,contentType : cadena describiendo el contenido de la string de mensajes de aplicacióncbStorePut - function () , disparado cuando el mensaje se coloca en outgoingStore si QoS es 1 o 2 .callback : function (err, packet) , disparada cuando se completa el manejo de QoS, o en la siguiente marca si QoS 0. Se produce un error si el cliente se desconecta. Async publish . Devuelve una Promise<Packet | undefined> .
messageId .Suscribirse a un tema o temas
topic es un tema String para suscribirse o una Array de temas para suscribirse. También puede ser un objeto, tiene como claves de objeto el nombre del tema y como valor el QoS, como {'test1': {qos: 0}, 'test2': {qos: 1}} . Se admiten los personajes comodines de MQTT topic ( + - para un solo nivel y # - para múltiples niveles)options son las opciones para suscribirse, que incluyen:qos QoS, predeterminado 0nl sin indicador MQTT 5.0 local (si el valor es verdadero, los mensajes de la aplicación no deben reenviarse a una conexión con un cliente igual al cliente de la conexión de publicación)rap Retiene como el indicador MQTT 5.0 publicado (si es verdadero, los mensajes de aplicación reenviados con esta suscripción Mantengan el indicador de retención con el que se publicaron. Si falsos, los mensajes de aplicación reenviados con esta suscripción tienen el indicador de retención establecido en 0.)rh Retener el manejo de MQTT 5.0 (esta opción especifica si los mensajes retenidos se envían cuando se establece la suscripción).properties : objectsubscriptionIdentifier : representar el identificador del number de suscripción,userProperties : se permite que la propiedad del usuario aparezca varias veces para representar múltiples nombres, pares de valores objectcallback - function (err, granted) devolución de llamada disparada en suback donde:err un error de suscripción o un error que ocurre cuando el cliente se desconectagranted hay una matriz de {topic, qos} donde:topic está suscrito al temaqos es el nivel de QoS otorgado Async subscribe . Devuelve una Promise<ISubscriptionGrant[]> .
Dar la baja de un tema o temas
topic es un tema String o una variedad de temas para darse de bajaoptions : Opciones de cancelar suscripción.properties : objectuserProperties : se permite que la propiedad del usuario aparezca varias veces para representar múltiples nombres, pares de valores objectcallback - function (err) , disparada en unión de suback. Se produce un error si el cliente se desconecta. Async unsubscribe . Devuelve una Promise<void> .
Cierre el cliente, acepta las siguientes opciones:
force : Pasarlo a verdadero cerrará al cliente de inmediato, sin esperar a que los mensajes en vuelo se acquine. Este parámetro es opcional.options : Opciones de desconexión.reasonCode : desconectar number de código de razónproperties : objectsessionExpiryInterval : representando el intervalo de vencimiento de la sesión en number de segundos,reasonString : representar el motivo de la string de desconexión,userProperties : la propiedad del usuario puede aparecer varias veces para representar múltiples nombres, object de pares de valor,serverReference : cadena que el cliente puede usar para identificar otro servidor para usar stringcallback : se llamará cuando el cliente esté cerrado. Este parámetro es opcional. end asíncrono. Devuelve una Promise<void> .
Eliminar un mensaje de la tienda saliente. La devolución de llamada saliente se llamará con error ('Mensaje eliminado') si se elimina el mensaje.
Después de que se llama a esta función, el MessageId se libera y se vuelve reutilizable.
mId : el mensaje del mensaje en la tienda saliente.Conectarse nuevamente usando las mismas opciones que Connect ()
Maneje los mensajes con soporte de retroceso, uno a la vez. Anule a voluntad, pero siempre llame callback , o el cliente colgará.
Boolean: Establezca en true si el cliente está conectado. false de lo contrario.
Número: Obtenga la última ID de mensaje. Esto es solo para mensajes enviados.
Boolean: Establezca en true si el cliente está intentando volver a conectarse al servidor. false de lo contrario.
Implementación en memoria del almacén de mensajes.
options son las opciones de la tienda:clean : mensajes true y limpios a bordo cuando se llama cierre (verdadero true ) Otras implementaciones de mqtt.Store :
Agrega un paquete a la tienda, un paquete es cualquier cosa que tenga una propiedad messageId . La devolución de llamada se llama cuando se ha almacenado el paquete.
Crea una transmisión con todos los paquetes de la tienda.
Elimina un paquete de la tienda, un paquete es cualquier cosa que tenga una propiedad messageId . La devolución de llamada se llama cuando se ha eliminado el paquete.
Cierra la tienda.
Importante
El único protocolo admitido en los navegadores es MQTT sobre WebSockets, por lo que debe usar ws:// o wss:// Protocols.
Mientras que el módulo WS se usa en NodeJS, WebSocket se usa en los navegadores. Esto es totalmente transparente para los usuarios, excepto lo siguiente:
La wsOption no es compatible con los navegadores.
Los navegadores no permiten captar muchos errores de WebSocket por razones de seguridad como:
El acceso a esta información podría permitir que una página web maliciosa obtenga información sobre su red, por lo que requieren que los navegadores informen todos los errores de tiempo de conexión de una manera indistinguible.
Por lo tanto, escuchar a client.on('error') puede no detectar todos los errores que recibiría en NodeJS Env.
MQTT.JS se agrupa usando ESBuild. Se prueba trabajando con todos los agrupadores como Webpack, Vite y React.
Puede encontrar todas las versiones de Bundles MQTT en la carpeta dist :
mqtt.js - formato de vida, no minificadomqtt.min.js - formato de vida, minificadomqtt.esm.js - Formato ESM minificadoA partir de mqtt.js> 5.2.0 puede importar MQTT en su código así:
import mqtt from 'mqtt'Esto será manejado automáticamente por su Bundler.
De lo contrario, puede elegir usar un paquete específico como:
import * as mqtt from 'mqtt/dist/mqtt'
import * as mqtt from 'mqtt/dist/mqtt.min'
import mqtt from 'mqtt/dist/mqtt.esm'El paquete MQTT.JS está disponible a través de http://unpkg.com, específicamente en https://unpkg.com/mqtt/dist/mqtt.min.js. Consulte http://unpkg.com para obtener la documentación completa en rangos de versión.
Así es como funciona QoS:
Acerca del consumo de datos, obviamente, Qos 2> Qos 1> Qos 0, si eso es una preocupación para usted.
A partir de V5, este proyecto está escrito en TypeScript y las definiciones de tipo se incluyen en el paquete.
Ejemplo:
import { connect } from "mqtt"
const client = connect ( 'mqtt://test.mosquitto.org' ) Apoya el programa WeChat Mini. Use el protocolo wxs . Ver los documentos de 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
} ) ; Admite el programa Ali Mini. Use el protocolo alis . Ver los documentos de Alipay.
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "alis://test.mosquitto.org" ) ; MQTT.JS es un proyecto de código abierto . Esto significa que:
Las personas que hacen contribuciones significativas y valiosas reciben acceso de compromiso al proyecto para contribuir como mejor les parezca. Este proyecto es más como un wiki abierto que un proyecto de código abierto estándar guardado.
Consulte el archivo contribuyente.md para obtener más detalles.
MQTT.JS solo es posible debido al excelente trabajo de los siguientes contribuyentes:
| Nombre | Github | Gorjeo |
|---|---|---|
| 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 desea admitir MQTT.JS, considere patrocinar al autor y los mantenedores activos:
MIT