MQTT.JS é uma biblioteca de clientes para o protocolo MQTT, escrito em JavaScript para Node.js e o navegador.
MQTT.JS é um projeto de código aberto, consulte a seção contribuinte para descobrir o que isso significa.
v5.0.0 (07/2023)
MqttClient new agora é necessária.v4.0.0 (lançado em 20/04/2020) remove o suporte para todas as versões do nó final da vida e agora suporta o nó v12 e v14. Ele também adiciona melhorias no log de depuração, juntamente com algumas adições de recursos.
Como uma alteração de quebra , por padrão, um manipulador de erros é incorporado ao cliente MQTT.JS; portanto, se algum erro for emitido e o usuário não criou um manipulador de eventos no cliente para erros, o cliente não será interrompido como resultado de erros não atendidos. Além disso, erros típicos do TLS como ECONNREFUSED , ECONNRESET foram adicionados a uma lista de erros de TLS que serão emitidos pelo cliente MQTT.js e, portanto, podem ser tratados como erros de conexão.
v3.0.0 adiciona suporte ao MQTT 5, suporte ao nó v10.x e muitas correções para melhorar a confiabilidade.
Nota: o suporte ao MQTT V5 é experimental, pois ainda não foi implementado pelos corretores.
v2.0.0 remove o suporte para o nó v0.8, v0.10 e v0.12, e é 3x mais rápido no envio de pacotes. Ele também remove toda a funcionalidade depreciada em v1.0.0, principalmente mqtt.createConnection e mqtt.Server . Na v2.0.0, as assinaturas são restauradas após a reconexão se clean: true . V1.xx está agora no LTS e continuará sendo suportado desde que existam usuários v0.8, v0.10 e v0.12.
Como uma mudança de quebra , a opção encoding no cliente antigo é removida e agora tudo é UTF-8, com exceção da password na mensagem de conexão e payload na mensagem de publicação, que são Buffer .
Outra mudança de ruptura é que o MQTT.JS agora é o padrão do MQTT v3.1.1; portanto, para apoiar os corretores antigos, leia o documento de opções do cliente.
v1.0.0 melhora a arquitetura geral do projeto, que agora é dividida em três componentes: o MQTT.JS mantém o cliente, a conexão MQTT inclui o código de conexão com aBone para uso do lado do servidor, e o MQTT-Packet inclui o analisador e o gerador do protocolo. O novo cliente melhora o desempenho por um fator de 30%, o WebSocket Support (MOWS agora está obsoleto) e tem um melhor suporte para QoS 1 e 2. A API anterior ainda é suportada, mas depreciada, como tal, não está documentada neste ReadMe.
npm install mqtt --savePor uma questão de simplicidade, vamos colocar o assinante e o editor no mesmo arquivo:
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 ( ) ;
} ) ;saída:
Hello mqttMQTT.js pode ser usado em aplicações nativas do React. Para usá -lo, veja o exemplo nativo do React
Se você deseja executar seu próprio corretor MQTT, pode usar o Mosquitto ou Aedes-Cli e iniciá-lo.
Você também pode usar uma instância de teste: test.mosquitto.org.
Se você não deseja instalar um corretor separado, tente usar o 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 agrupa um comando para interagir com um corretor. Para disponibilizá -lo no seu caminho, você deve instalar o MQTT.js globalmente:
npm install mqtt -gEntão, em um terminal
mqtt sub -t ' hello ' -h ' test.mosquitto.org ' -vEm outro
mqtt pub -t ' hello ' -h ' test.mosquitto.org ' -m ' from MQTT.js ' Consulte mqtt help <command> Para obter a ajuda do comando.
O MQTT.JS usa o pacote de depuração para fins de depuração. Para ativar os logs de depuração, adicione a seguinte variável de ambiente no tempo de execução:
# ( example using PowerShell, the VS Code default )
$env:DEBUG='mqttjs*' Uma parte importante de qualquer conexão do WebSocket é o que fazer quando uma conexão cai e o cliente precisa se reconectar. O MQTT possui suporte de reconexão incorporado que pode ser configurado para se comportar de maneiras que se adequam ao aplicativo.
transformWsUrl (somente WebSocket)Quando uma conexão MQTT cai e precisa se reconectar, é comum exigir que qualquer autenticação associada à conexão seja mantida em corrente com o mecanismo de autenticação subjacente. Por exemplo, alguns aplicativos podem passar em um token de autenticação com as opções de conexão na conexão inicial, enquanto outros serviços em nuvem podem exigir que um URL seja assinado com cada conexão.
Quando a reconexão ocorre no ciclo de vida do aplicativo, os dados de autenticação original podem ter expirado.
Para resolver isso, podemos usar um gancho chamado transformWsUrl para manipular um dos URL da conexão ou as opções do cliente no momento de uma reconexão.
Exemplo (Update ClientID & UserName em cada reconectamento):
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 ,
} );Agora, toda vez que uma nova conexão do WebSocket é aberta (espero que não seja com muita frequência), obteremos um URL assinado ou dados de token de autenticação frescos.
NOTA: Atualmente, este gancho não suporta promessas, o que significa que, para usar o token de autenticação mais recente, você deve ter algum mecanismo externo executando que lida com a autenticação no nível do aplicativo refrescante para que a conexão WebSocket possa simplesmente pegar o token válido ou URL assinado mais recente.
createWebsocket (somente WebSocket)Quando você precisa adicionar um subprotocolo ou cabeçalho personalizado para abrir uma conexão através de um proxy com autenticação personalizada, esse retorno de chamada permite criar sua própria instância de um WebSocket que será usado no 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 garantir que o cliente MQTT tente automaticamente se reconectar quando a conexão for descartada, você deve definir a opção reconnectPeriod para um valor maior que 0. Um valor de 0 desativará a reconexão e encerrará a conexão final quando cair.
O valor padrão é de 1000 ms, o que significa que tentará se reconectar 1 segundo depois de perder a conexão.
Observe que isso permitirá apenas reconectar após um tempo limite de conexão ou após uma conexão bem -sucedida. Ele (por padrão) não ativará as conexões de nova revenção que são negadas ativamente com um erro de Connack pelo servidor.
Para ativar também se reconecta automático para erros do Connack, defina reconnectOnConnackError: true .
Se o cliente definir a opção autoUseTopicAlias:true , o MQTT.js usa o alias de tópicos existentes automaticamente.
cenário de exemplo:
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)O usuário não precisa gerenciar qual tópico é mapeado para qual alias de tópico. Se o usuário quiser registrar o alias de tópicos, publique tópico com alias de tópico. Se o usuário quiser usar o alias do tópico, publique tópico sem alias de tópico. Se houver um alias de tópico mapeado, adicione -o como uma propriedade e atualize o tópico para esvaziar a string.
Se o cliente definir a opção autoAssignTopicAlias:true , o MQTT.JS usa o alias de tópicos existentes automaticamente. Se não houver alias de tópico, atribua um novo alias de tópico vago automaticamente. Se o alias de tópicos for totalmente usado, a entrada LRU (menos usada recentemente) é substituída.
cenário de exemplo:
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)Além disso, o usuário pode registrar manualmente o par de tópicos-alias usando o tópico de publicação: 'alguns', ta: x. Funciona bem com o alias de tópicos automáticos atribuem.
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()Conecta -se ao corretor especificado pelo URL e opções fornecidas e retorna um cliente.
O URL pode estar nos seguintes protocolos: 'MQTT', 'MQTTS', 'TCP', 'TLS', 'WS', 'WSS', 'WXS', 'ALIS'. Se você estiver tentando se conectar a um soquete Unix, apenas anexa o sufixo +unix ao protocolo (ex: mqtt+unix ). Isso definirá a propriedade unixSocket automaticamente.
O URL também pode ser um objeto conforme retornado pelo URL.parse() , nesse caso os dois objetos são mesclados, ou seja, você pode passar um único objeto com o URL e as opções de conexão.
Você também pode especificar opções servers com conteúdo: [{ host: 'localhost', port: 1883 }, ... ] , nesse caso, essa matriz é iterada em cada conexão.
Para todas as opções relacionadas ao MQTT, consulte o construtor do cliente.
O invólucro assíncrono em torno da função connect .
Retorna uma Promise que resolve uma instância mqtt.Client quando o cliente dispara um evento 'connect' ou 'end' ou rejeita com um erro se o 'error' for disparado.
Observe que a opção manualConnect fará com que a promessa devolvida por essa função nunca resolva ou rejeite, pois o cliente subjacente nunca dispara nenhum evento.
A classe Client envolve uma conexão do cliente com um corretor MQTT sobre um método de transporte arbitrário (TCP, TLS, WebSocket, ECC). Client é uma ordem de eventos que tem seus próprios eventos
Client lida automaticamente o seguinte:
Os argumentos são:
streamBuilder é uma função que retorna uma subclasse da classe Stream que suporta o evento connect . Normalmente um net.Socket .options são as opções de conexão do cliente (consulte: o pacote Connect). Padrões: wsOptions : são as opções de conexão do WebSocket. O padrão é {} . É específico para websockets. Para possíveis opções, dê uma olhada: https://github.com/websockets/ws/blob/master/doc/ws.md.
keepalive : 60 segundos, definido como 0 para desativar
reschedulePings : Reschedule Ping Mensagens após o envio de pacotes (padrão true )
clientId : 'mqttjs_' + Math.random().toString(16).substr(2, 8)
protocolId : 'MQTT'
protocolVersion : 4
clean : true , defina como false para receber QoS 1 e 2 mensagens enquanto offline
reconnectPeriod : 1000 milissegundos, intervalo entre duas reconexões. Desative a reconectar automaticamente, configurando para 0 .
reconnectOnConnackError : false , seja também se deve se reconectar se um Connack for recebido com um erro.
connectTimeout : 30 * 1000 milissegundos, hora de esperar antes que um Connack seja recebido
username : o nome de usuário exigido pelo seu corretor, se houver
password : a senha exigida pelo seu corretor, se houver
incomingStore : uma loja para os pacotes de entrada
outgoingStore : uma loja para os pacotes de saída
queueQoSZero : Se a conexão estiver quebrada, fila de QoS zero de fila (padrão true )
customHandleAcks : MQTT 5 Recurso do manuseio personalizado Pacotes Puback e Pubrec. Seu retorno de chamada:
customHandleAcks: function ( topic , message , packet , done ) { /*some logic with calling done(error, reasonCode)*/ } autoUseTopicAlias : Ativando Alias de tópicos automáticos usando a funcionalidade
autoAssignTopicAlias : Ativa o alias de tópicos automáticos Atribuir funcionalidade
properties : Propriedades MQTT 5.0. object que suporta as seguintes propriedades:
sessionExpiryInterval : representando o intervalo de expiração da sessão em number segundos,receiveMaximum : representando o number máximo de valor de recebimento,maximumPacketSize : Representando o tamanho máximo do pacote que o cliente está disposto a aceitar number ,topicAliasMaximum : Representando o Tópico Alias Valor máximo indica o valor mais alto que o cliente aceitará como um alias de tópico enviado pelo number do servidor,requestResponseInformation : O cliente usa esse valor para solicitar ao servidor que retorne as informações de resposta no Connack boolean ,requestProblemInformation : O cliente usa esse valor para indicar se a sequência de motivos ou as propriedades do usuário são enviadas no caso de falhas boolean ,userProperties : A propriedade do usuário pode aparecer várias vezes para representar vários nomes, objeto de pares de valores, object ,authenticationMethod : o nome do método de autenticação usado para string de autenticação estendida,authenticationData : dados binários que contêm dados de autenticação binary authPacket : Configurações para object de pacote de autenticação
will : Uma mensagem que será enviada pelo corretor automaticamente quando o cliente se desconectar mal. O formato é:
topic : O tópico para publicarpayload : a mensagem para publicarqos : o QoSretain : a bandeira de retençãoproperties : Propriedades de vontade por MQTT 5.0:willDelayInterval : representando o intervalo de atraso em number de segundos,payloadFormatIndicator : a mensagem é UTF-8 Dados de caracteres codificados ou não boolean ,messageExpiryInterval : o valor é a vida útil da mensagem em segundos e é enviada como o intervalo de expiração da publicação quando o servidor publicar o number da mensagem, o número da mensagem,contentType : descrevendo o conteúdo da string de Will Message,responseTopic : String que é usada como o nome do tópico para uma string de mensagens de resposta,correlationData : Os dados de correlação são usados pelo remetente da mensagem de solicitação para identificar para qual solicitação a mensagem de resposta é quando é recebida binary ,userProperties : A propriedade do usuário pode aparecer várias vezes para representar vários nomes, object de pares de valores transformWsUrl : opcional (url, options, client) => url apenas para protocolos WS/WSS. Pode ser usado para implementar URLs de assinatura que, após a reconectar, podem ter sido expirados.
createWebsocket : url, websocketSubProtocols, options) => Websocket apenas para protocolos WS/WSS. Pode ser usado para implementar um subprotocolo ou implementação personalizado do WebSocket.
resubscribe : Se a conexão estiver quebrada e se reconectar, os tópicos assinados serão automaticamente inscritos novamente (padrão true )
messageIdProvider : provedor de mensagens personalizado. Quando new UniqueMessageIdProvider() é definido, não é fornecido um MessageId que não conflito.
log : Função de log personalizada. O padrão usa o pacote de depuração.
manualConnect : Impede o construtor para chamar connect . Nesse caso, depois que o mqtt.connect é chamado, você deve chamar de client.connect manualmente.
timerVariant : Padrões para auto , que tenta determinar qual temporizador é mais apropriado para o seu ambiente, se você estiver com problemas de detecção, poderá defini -lo como worker ou native . Se ninguém combina com você, você pode passar um objeto de timer com propriedades definidas e claras:
timerVariant: {
set : ( func , timer ) => setInterval ( func , timer ) ,
clear : ( id ) => clearInterval ( id )
} forceNativeWebSocket : defina como true se você estiver com problemas de detecção (ou seja, o ws does not work in the browser ) para forçar o uso do WebSocket nativo. É importante observar que, se definido como true para o primeiro cliente criado, todos os clientes usarão o WebSocket nativo. E inversamente, se não estiver definido ou definido como false, tudo usará o resultado da detecção.
unixSocket : se você deseja se conectar a um soquete Unix, defina -o como true
Caso o MQTTS (MQTT sobre TLS) seja necessário, o objeto options é passado para tls.connect() . Se estiver usando um certificado autoassinado , defina rejectUnauthorized: false . No entanto, seja cauteloso, pois isso o expõe a um homem em potencial nos ataques do meio e não é recomendado para a produção.
Para aqueles que suportam vários protocolos TLS em uma única porta, como MQTTS e MQTT sobre WSS, utilize a opção ALPNProtocols . Isso permite definir o protocolo de negociação do protocolo de camada de aplicação (ALPN). Você pode definir ALPNProtocols como uma matriz de string, buffer ou uint8array com base na sua configuração.
Se você estiver se conectando a um corretor que suporta apenas o MQTT 3.1 (não 3.1.1 compatível), você deve passar estas opções adicionais:
{
protocolId : 'MQIsdp' ,
protocolVersion : 3
}Isso é confirmado no RabbitMQ 3.2.4 e no mosquitto <1,3. O Mosquitto versão 1.3 e 1.4 funciona bem sem isso.
'connect' function (connack) {}
Emitido na conexão bem -sucedida (re) (ou seja, Connack RC = 0).
connack recebeu o pacote Connack. Quando a opção de conexão clean é false e o servidor tem uma sessão anterior para a opção de conexão clientId , o sinalizador connack.sessionPresent é true . Quando esse é o caso, você pode confiar na sessão armazenada e preferir não enviar comandos de inscrição para o cliente. 'reconnect' function () {}
Emitido quando uma reconexão começa.
'close' function () {}
Emitido após uma desconexão.
'disconnect' function (packet) {}
Emitido depois de receber o pacote de desconexão do corretor. Recurso MQTT 5.0.
'offline' function () {}
Emitido quando o cliente fica offline.
'error' function (error) {}
Emitido quando o cliente não pode conectar (ou seja, Connack RC! = 0) ou quando ocorre um erro de análise.
Os seguintes erros de TLS serão emitidos como um evento error :
ECONNREFUSEDECONNRESETEADDRINUSEENOTFOUND'end' function () {}
Emitido quando mqtt.Client#end() é chamado. Se um retorno de chamada foi passado para mqtt.Client#end() , este evento será emitido assim que o retorno de chamada retornar.
'message' function (topic, message, packet) {}
Emitido quando o cliente recebe um pacote de publicação
topic Tópico do pacote recebidomessage do pacote recebidopacket recebido pacote, conforme definido no MQTT-Packet 'packetsend' function (packet) {}
Emitido quando o cliente envia qualquer pacote. Isso inclui pacotes .published (), bem como pacotes usados pelo MQTT para gerenciar assinaturas e conexões
packet recebido pacote, conforme definido no MQTT-Packet 'packetreceive' function (packet) {}
Emitido quando o cliente recebe qualquer pacote. Isso inclui pacotes de tópicos inscritos, bem como pacotes usados pelo MQTT para gerenciar assinaturas e conexões
packet recebido pacote, conforme definido no MQTT-Packet Por padrão, o cliente se conecta quando o construtor é chamado. Para evitar isso, você pode definir a opção manualConnect como true e ligar para client.connect() manualmente.
Publique uma mensagem para um tópico
topic é o tópico para publicar, Stringmessage é a mensagem para publicar, Buffer ou Stringoptions são as opções a serem publicadas, incluindo:qos , Number , Padrão 0retain bandeira de retenção, Boolean , padrão falsedup como bandeira duplicada, Boolean , padrão falseproperties : object MQTT 5.0 PropriedadespayloadFormatIndicator : a carga útil é UTF-8 Dados de caracteres codificados ou não boolean ,messageExpiryInterval : a vida útil da mensagem do aplicativo em number de segundos,topicAlias : valor usado para identificar o tópico em vez de usar o number do nome do tópico,responseTopic : String que é usada como o nome do tópico para uma string de mensagens de resposta,correlationData : Usado pelo remetente da mensagem de solicitação para identificar para qual solicitação a mensagem de resposta é quando é recebida binary ,userProperties : A propriedade do usuário pode aparecer várias vezes para representar vários nomes, objeto de pares de valores, object ,subscriptionIdentifier : representando o identificador do number de assinatura,contentType : String descrevendo o conteúdo da string da mensagem do aplicativocbStorePut - function () , disparado quando a mensagem é colocada no outgoingStore se a QoS for 1 ou 2 .callback - function (err, packet) , disparado quando o manuseio de QoS é concluído ou no próximo tick se o QoS 0. Ocorre um erro se o cliente estiver desconectando. ASYNC publish . Retorna uma Promise<Packet | undefined> .
messageId .Inscreva -se em um tópico ou tópicos
topic é um tópico String para se inscrever ou uma Array de tópicos para se inscrever. Também pode ser um objeto, possui como teclas de objeto o nome do tópico e, como valor, o QoS, como {'test1': {qos: 0}, 'test2': {qos: 1}} . Os caracteres curinga topic MQTT são suportados ( + - para nível único e # - para vários níveis)options são as opções a se inscrever, incluindo:qos , padrão 0nl NO FAGN LOCAL MQTT 5.0 (Se o valor for verdadeiro, as mensagens de aplicativo não devem ser encaminhadas para uma conexão com um cliente igual ao cliente da conexão de publicação)rap retenha como o sinalizador MQTT 5.0 publicado (se verdadeiro, as mensagens de aplicativo encaminhadas usando esta assinatura Mantenha o sinalizador de retenção com o qual foram publicadas. Se falsas, as mensagens de aplicativo encaminhadas usando esta assinatura têm o sinalizador de retenção definido como 0.)rh Retém o manuseio do MQTT 5.0 (esta opção especifica se as mensagens retidas são enviadas quando a assinatura é estabelecida.)properties : objectsubscriptionIdentifier : representando o identificador do number de assinatura,userProperties : A propriedade do usuário pode aparecer várias vezes para representar vários nomes, object de pares de valorescallback - function (err, granted) retorno de chamada disparado no suback onde:err um erro de assinatura ou um erro que ocorre quando o cliente está desconectandogranted é uma variedade de {topic, qos} onde:topic é um tópico inscritoqos é o nível de QoS concedido nele subscribe assíncrona. Retorna uma Promise<ISubscriptionGrant[]> .
Cancelar a inscrição de um tópico ou tópicos
topic é um tópico String ou uma variedade de tópicos para cancelar a inscriçãooptions : Opções de cancelar inscrição.properties : objectuserProperties : A propriedade do usuário pode aparecer várias vezes para representar vários nomes, object de pares de valorescallback - function (err) , disparado em cancelamento. Ocorre um erro se o cliente estiver desconectando. ASYNC unsubscribe . Retorna uma Promise<void> .
Feche o cliente, aceita as seguintes opções:
force : Passá-lo para True fechará o cliente imediatamente, sem esperar que as mensagens a bordo sejam acertadas. Este parâmetro é opcional.options : Opções de desconectar.reasonCode : Desconecte number do código da razãoproperties : objectsessionExpiryInterval : representando o intervalo de expiração da sessão em number segundos,reasonString : representando o motivo da string de desconexão,userProperties : A propriedade do usuário pode aparecer várias vezes para representar vários nomes, objeto de pares de valores, object ,serverReference : String que pode ser usada pelo cliente para identificar outro servidor para usar stringcallback : será chamado quando o cliente estiver fechado. Este parâmetro é opcional. end assíncrono. Retorna uma Promise<void> .
Remova uma mensagem da história em saída. O retorno de chamada de saída será chamado com erro ('Mensagem removida') se a mensagem for removida.
Depois que essa função é chamada, o MessageId é lançado e se torna reutilizável.
mId : O MessageId da mensagem na história de saída.Conecte -se novamente usando as mesmas opções que Connect ()
Lidar com mensagens com suporte de contrapressão, uma de cada vez. Substitua à vontade, mas sempre ligue callback chamada , ou o cliente pendurará.
Booleano: defina como true se o cliente estiver conectado. false caso contrário.
Número: Obtenha o último ID da mensagem. Isto é apenas para mensagens enviadas.
Booleano: defina como true se o cliente estiver tentando se reconectar ao servidor. false caso contrário.
Implementação na memória do armazenamento de mensagens.
options são as opções da loja:clean : true , Limpe as mensagens de bordo quando o fechamento é chamado (padrão true ) Outras implementações do mqtt.Store :
Adiciona um pacote à loja, um pacote é qualquer coisa que tenha uma propriedade messageId . O retorno de chamada é chamado quando o pacote foi armazenado.
Cria um fluxo com todos os pacotes da loja.
Remove um pacote da loja, um pacote é qualquer coisa que tenha uma propriedade messageId . O retorno de chamada é chamado quando o pacote foi removido.
Fecha a loja.
Importante
O único protocolo suportado nos navegadores é o MQTT no WebSockets, então você deve usar ws:// ou wss:// Protocols.
Enquanto o módulo WS é usado no NodeJS, o WebSocket é usado nos navegadores. Isso é totalmente transparente para os usuários, exceto o seguinte:
A wsOption não é suportada nos navegadores.
Os navegadores não permitem capturar muitos erros do WebSocket por razões de segurança como:
O acesso a essas informações pode permitir que uma página da Web maliciosa obtenha informações sobre sua rede, para que elas exijam que os navegadores relatem todos os erros de tempo de conexão de maneira indistinguível.
Portanto, ouvir client.on('error') pode não pegar todos os erros que você receberia no nodejs Env.
MQTT.JS é incluído usando o ESBuild. É testado trabalhando com todos os pacotes como Webpack, Vite e React.
Você pode encontrar todas as versões do MQTT Bundles na pasta dist :
mqtt.js - Formato IIFE, não minificadomqtt.min.js - formato iife, minificadomqtt.esm.js - Formato ESM MinificadoA partir de MQTT.JS> 5.2.0, você pode importar MQTT no seu código como este:
import mqtt from 'mqtt'Isso será tratado automaticamente pelo seu empurrador.
Caso contrário, você pode optar por usar um pacote 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'O pacote mqtt.js está disponível em http://unpkg.com, especificamente em https://unpkg.com/mqtt/dist/mqtt.min.js. Consulte http://unpkg.com para obter a documentação completa sobre intervalos de versão.
Aqui está como o QoS funciona:
Sobre o consumo de dados, obviamente, QoS 2> QoS 1> QoS 0, se isso é uma preocupação para você.
A partir da V5, este projeto está escrito no TypeScript e as definições de tipo estão incluídas no pacote.
Exemplo:
import { connect } from "mqtt"
const client = connect ( 'mqtt://test.mosquitto.org' ) Suporta o WeChat Mini Program. Use o protocolo wxs . Veja os documentos do 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
} ) ; Suporta Ali Mini Program. Use o protocolo alis . Veja os documentos de Alipay.
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "alis://test.mosquitto.org" ) ; MQTT.JS é um projeto de código aberto . Isso significa que:
Indivíduos que fazem contribuições significativas e valiosas recebem acesso ao projeto para contribuir como acharem o ajuste. Este projeto é mais parecido com um wiki aberto do que um projeto de código aberto protegido padrão.
Consulte o arquivo contribuindo.md para obter mais detalhes.
MQTT.JS só é possível devido ao excelente trabalho dos seguintes colaboradores:
| Nome | Github | |
|---|---|---|
| Adam Rudd | Github/Adamvr | Twitter/@adam_vr |
| Matteo Collina | Github/McOllina | Twitter/@Matteocollina |
| Maxime Ager | Github/4rzael | Twitter/@4rzael |
| Siarhei Buntsevich | Github/Scarry1992 | |
| Daniel Lando | Github/Robertslando |
Se você deseja apoiar o MQTT.js, considere patrocinar o autor e os mantenedores ativos:
Mit