MQTT.JS является клиентской библиотекой для протокола MQTT, написанной в JavaScript для node.js и браузера.
MQTT.JS - это открытый проект с открытым исходным кодом, см. Раздел «Содействие», чтобы узнать, что это значит.
v5.0.0 (07/2023)
MqttClient теперь требуется new .v4.0.0 (выпущен 04/2020) удаляет поддержку всех версий узлов «Конец жизни», а теперь поддерживает узел V12 и V14. Это также добавляет улучшения к отладке ведения журнала, а также некоторые дополнения функций.
В качестве прерывания изменения , по умолчанию обработчик ошибок встроен в клиент MQTT.JS, поэтому, если какие -либо ошибки испускаются и пользователь не создал обработчик событий на клиенте для ошибок, клиент не сломается в результате невозможных ошибок. Кроме того, типичные ошибки TLS, такие как ECONNREFUSED , ECONNRESET были добавлены в список ошибок TLS, которые будут испускаются от клиента MQTT.JS, и поэтому могут рассматриваться как ошибки подключения.
v3.0.0 добавляет поддержку MQTT 5, поддержку узла V10.x и многие исправления для повышения надежности.
Примечание. Поддержка MQTT V5 экспериментальная, поскольку она еще не была реализована брокерами.
v2.0.0 удаляет поддержку узла V0.8, V0.10 и V0.12, и в отправке пакетов в 3 раза быстрее. Он также удаляет все устаревшие функциональность в V1.0.0, в основном mqtt.createConnection и mqtt.Server . Из v2.0.0 подписки восстанавливаются при повторном соединении, если clean: true . V1.xx сейчас находится в LTS , и он будет продолжать поддерживать, пока есть пользователи V0.8, V0.10 и V0.12.
В качестве прерывания изменение , опция encoding в старом клиенте удаляется, и теперь все является UTF-8, за исключением password в сообщении Connect и payload в сообщении Publish, которые являются Buffer .
Другое нарушение изменений заключается в том, что MQTT.JS теперь по умолчанию по умолчанию MQTT v3.1.1, поэтому для поддержки старых брокеров, пожалуйста, прочитайте DOC клиентских вариантов.
v1.0.0 улучшает общую архитектуру проекта, которая в настоящее время разделена на три компонента: MQTT.JS сохраняет клиент, MQTT-Connection включает код подключения Barebone для использования на стороне сервера, а MQTT-Packet включает в себя протокол Parser и Generator. Новый клиент повышает производительность с помощью 30% фактора, встраивает поддержку WebSocket (теперь устанавливается коси), и он лучше поддерживает QoS 1 и 2. Предыдущий API все еще поддерживается, но устарел, как таковой, он не задокументирован в этом чтении.
npm install mqtt --saveДля простоты давайте поместим подписчика и издателя в один и тот же файл:
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 ( ) ;
} ) ;выход:
Hello mqttMQTT.JS может использоваться в нативных приложениях React. Чтобы использовать его, см. Пример натурального React
Если вы хотите запустить свой собственный брокер MQTT, вы можете использовать Mosquitto или Aedes-Cli и запустить его.
Вы также можете использовать тестовый экземпляр: test.mosquitto.org.
Если вы не хотите устанавливать отдельный брокер, вы можете попробовать использовать 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 объединяет команду для взаимодействия с брокером. Чтобы получить его на вашем пути, вы должны установить mqtt.js во всем мире:
npm install mqtt -gЗатем на одном терминале
mqtt sub -t ' hello ' -h ' test.mosquitto.org ' -vНа другом
mqtt pub -t ' hello ' -h ' test.mosquitto.org ' -m ' from MQTT.js ' См. mqtt help <command> для справки команды.
MQTT.JS использует пакет отладки в целях отладки. Чтобы включить журналы отладки, добавьте следующую переменную среды во время выполнения:
# ( example using PowerShell, the VS Code default )
$env:DEBUG='mqttjs*' Важной частью любого соединения WebSocket является то, что делать, когда подключение выпадает, и клиент должен воссоединиться. MQTT имеет встроенную поддержку переподключения, которая может быть настроена, чтобы вести себя таким образом, чтобы они соответствовали приложению.
transformWsUrl (только для WebSocket)Когда соединение MQTT падает и необходимо восстановить подключение, обычно требуется, чтобы любая аутентификация, связанная с соединением, сохранялась с точностью с помощью базового механизма авторизации. Например, некоторые приложения могут передать токен Auth с параметрами подключения при начальном соединении, в то время как другие облачные сервисы могут потребовать, чтобы URL -адрес был подписан с каждым соединением.
К тому времени, когда воспроизведение происходит в жизненном цикле приложения, исходные данные AUTH могли истек.
Чтобы решить это, мы можем использовать крючок под названием transformWsUrl для манипулирования любым URL -адресом подключения или вариантами клиента во время повторного подключения.
Пример (обновлять ClientId и имя пользователя на каждом переподключении):
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 ,
} );Теперь каждый раз, когда открывается новое соединение WebSocket (мы надеемся не слишком часто), мы получим свежий подписанный URL -адрес или данные токена свежих аутов.
ПРИМЕЧАНИЕ. В настоящее время этот крюк не поддерживает обещания, что означает, что для использования последнего токена Auth, вы должны иметь некоторый внешний механизм, который обрабатывает аутентификацию на уровне приложения, чтобы подключение WebSocket могло просто захватить последний допустимый токен или подписанный URL.
createWebsocket (только для WebSocket)Когда вам нужно добавить пользовательский подпротокол или заголовок WebSocket, чтобы открыть соединение через прокси с пользовательской аутентификацией, этот обратный вызов позволяет вам создавать свой собственный экземпляр WebSocket, который будет использоваться в клиенте 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 Чтобы убедиться, что клиент MQTT автоматически пытается восстановить подключение при отброшении соединения, необходимо установить опцию клиента reconnectPeriod до значения, превышающего 0. Значение 0 отключит переподключение, а затем завершить окончательное соединение, когда оно будет сброшено.
Значение по умолчанию составляет 1000 мс, что означает, что оно попытается воссоединить 1 секунду после потери подключения.
Обратите внимание, что это включит переподключения только после тайм -аута подключения или после успешного соединения. Он не будет (по умолчанию) решать повторные соединения, которые активно отказаны от ошибки Connack сервером.
Чтобы также включить автоматические переподключения для ошибок Connack, установите reconnectOnConnackError: true .
Если клиент устанавливает опцию autoUseTopicAlias:true , тогда MQTT.JS автоматически использует псевдоним темы.
Пример сценария:
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)Пользователю не нужно управлять какой темой отображается с какой псевдонимом. Если пользователь хочет зарегистрировать псевдоним темы, то опубликуйте тему с псевдонимом темы. Если пользователь хочет использовать псевдоним темы, то публикуйте тему без псевдонимы тему. Если есть псевдоним темы, а затем добавьте его в качестве свойства и обновите тему для пустой строки.
Если клиент устанавливает опцию autoAssignTopicAlias:true , то MQTT.JS автоматически использует существующий псевдоним. Если псевдоним тему не существует, тогда автоматически назначьте новый вакантный псевдоним темы. Если псевдоним темы полностью используется, то запись темы LRU (наименьшее недавно) перезаписывается.
Пример сценария:
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)Также пользователь может вручную зарегистрировать пару тем, используя тему публикации: «Некоторые», TA: x. Это хорошо работает с автоматическим псевдонимом темы.
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()Подключается к брокеру, указанному данным URL и опциями, и возвращает клиента.
URL может быть по следующим протоколам: «MQTT», «MQTTS», «TCP», «TLS», «WS», «WSS», «WXS», «ALIS». Если вы пытаетесь подключиться к сокету Unix, просто добавьте суффикс +unix к протоколу (например: mqtt+unix ). Это автоматически установит свойство unixSocket .
URL также может быть объектом, возвращаемым URL.parse() , в этом случае два объекта объединены, то есть вы можете передать один объект как с URL, так и с параметрами Connect.
Вы также можете указать параметры servers с контентом: [{ host: 'localhost', port: 1883 }, ... ] , в этом случае массив итерации при каждом подключении.
Для всех параметров, связанных с MQTT, см. Client Constructor.
Асинхронная обертка вокруг функции connect .
Возвращает Promise , которое разрешает экземпляр mqtt.Client , когда клиент запускает событие 'connect' или 'end' или отклоняет ошибку, если 'error' запускается.
Обратите внимание, что опция manualConnect приведет к тому, что обещание, возвращаемое этой функцией, никогда не разрешается и не отклоняется, поскольку базовый клиент никогда не стреляет каких -либо событий.
Client -класс завершает клиентское соединение с брокером MQTT по произвольному методу транспорта (TCP, TLS, WebSocket, ECC). Client - это события, у которого есть свои события
Client автоматически обрабатывает следующее:
Аргументы:
streamBuilder - это функция, которая возвращает подкласс класса Stream , который поддерживает событие connect . Обычно net.Socket .options - это параметры подключения клиента (см.: The Connect Packet). По умолчанию: wsOptions : это параметры соединения WebSocket. По умолчанию {} . Это специфично для веб -питания. Для получения возможных вариантов взгляните на: https://github.com/websockets/ws/blob/master/doc/ws.md.
keepalive : 60 секунд, установленные на 0 , чтобы отключить
reschedulePings : Переносные сообщения PING после отправки пакетов (по умолчанию true )
clientId : 'mqttjs_' + Math.random().toString(16).substr(2, 8)
protocolId : 'MQTT'
protocolVersion : 4
clean : true , установите на false, чтобы получить сообщения Qos 1 и 2, в автономном режиме
reconnectPeriod : 1000 миллисекунд, интервал между двумя переподключениями. Отключите Auto Reconnect, установив на 0 .
reconnectOnConnackError : false , будь то также повторно подключить, если разъединен с ошибкой.
connectTimeout : 30 * 1000 миллисекунд, время, чтобы подождать, прежде чем будет
username : имя пользователя, требуемое вашим брокером, если таковые имеются
password : пароль, требуемый вашим брокером, если таковые имеются
incomingStore : магазин для входящих пакетов
outgoingStore : магазин для исходящих пакетов
queueQoSZero : Если соединение нарушено, в очереди исходящие сообщения Qos Zero (по умолчанию true )
customHandleAcks : MQTT 5 Особенность пользовательских пакетов Pubck и PubRec. Его обратный вызов:
customHandleAcks: function ( topic , message , packet , done ) { /*some logic with calling done(error, reasonCode)*/ } autoUseTopicAlias : включение автоматического псевдонима тему с использованием функциональности
autoAssignTopicAlias : Включение автоматического псевдонима, а также назначение функциональности
properties : свойства MQTT 5.0. object , который поддерживает следующие свойства:
sessionExpiryInterval : представление интервала истечения сессии в number секунд,receiveMaximum : представляющий максимальный number получения,maximumPacketSize : представление максимального размера пакета, который клиент готов принять number ,topicAliasMaximum : представление по псевдониме тему, максимальное значение, указывает на самое высокое значение, которое клиент примет в качестве псевдоним, отправленной number сервера,requestResponseInformation : клиент использует это значение для запроса сервера для возврата информации о ответе в boolean Connack,requestProblemInformation : клиент использует это значение, чтобы указать, отправляются ли причина или свойства пользователя в случае сбоев boolean ,userProperties : Свойство пользователя разрешено появляться несколько раз для представления нескольких имен, объект паров значений, object ,authenticationMethod : имя метода аутентификации, используемого для расширенной string аутентификации,authenticationData : двоичные данные, содержащие данные аутентификации binary authPacket : Настройки для object Auth Packet
will : Сообщение, которое будет отправлено брокером автоматически, когда клиент плохо отключается. Формат:
topic : Тема публикацииpayload : сообщение о публикацииqos : QoSretain : флаг поддержанияproperties : свойства завещания MQTT 5.0:willDelayInterval : представляющий интервал задержки за number ,payloadFormatIndicator : Сообщение будет UTF-8, кодируемые данные символов или нет boolean ,messageExpiryInterval : значение - это время жизни сообщений о завещании за секунды и отправляется в качестве интервала истечения срока публикации, когда сервер публикует number сообщения,contentType : описание содержимого string сообщений Will,responseTopic : строка, которая используется в качестве имени темы для string сообщения ответа,correlationData : Данные корреляции используются отправителем сообщения запроса, чтобы определить, какой запрос отвечает сообщение о том, когда оно получено binary ,userProperties : пользовательское свойство разрешено появляться несколько раз для представления нескольких имен, object пары значений transformWsUrl : необязательный (url, options, client) => url только для протоколов WS/WSS. Можно использовать для реализации подписанных URL -адресов, которые после повторного подключения могли стать истекшим.
createWebsocket : необязательный url, websocketSubProtocols, options) => Websocket только для протоколов WS/WSS. Может использоваться для реализации пользовательского субпротокола или реализации WebSocket.
resubscribe : Если соединение сломано и воспроизводит, подписанные темы снова автоматически подписаны (по умолчанию true )
messageIdProvider : Custom MessageId. Когда установлен new UniqueMessageIdProvider() , тогда предоставляется не конфликтное сообщение.
log : пользовательская функция журнала. По умолчанию используется пакет отладки.
manualConnect : предотвращает конструктор для вызова connect . В этом случае после вызова mqtt.connect вы должны позвонить в client.connect вручную.
timerVariant : по умолчанию auto , который пытается определить, какой таймер наиболее подходит для вашей среды, если у вас проблемы с обнаружением, вы можете установить его worker или native . Если никто вам не подходит, вы можете передать объект таймера с установленными и четкими свойствами:
timerVariant: {
set : ( func , timer ) => setInterval ( func , timer ) ,
clear : ( id ) => clearInterval ( id )
} forceNativeWebSocket : установите на True, если у вас есть проблемы с обнаружением (то есть ws does not work in the browser ), чтобы заставить использовать нативный WebSocket. Важно отметить, что если для первого созданного клиента для первого клиента, то все клиенты будут использовать Native WebSocket. И наоборот, если не установить или установить на false, все будут использовать результат обнаружения.
unixSocket : если вы хотите подключиться к розетку Unix, установите это на True
В случае, если MQTTS (MQTT над TLS) требуется, объект options проходит через tls.connect() . При использовании саморегистрированного сертификата установите rejectUnauthorized: false . Тем не менее, будьте осторожны, так как это подвергает вас потенциальному человеку в средних атаках и не рекомендуется для производства.
Для тех, кто поддерживает несколько протоколов TLS на одном порту, таких как MQTTS и MQTT, над WSS, используйте опцию ALPNProtocols . Это позволяет определить протокол протокола протокола приложений (ALPN). Вы можете установить ALPNProtocols в качестве строкового массива, буфера или Uint8Array на основе вашей настройки.
Если вы подключитесь к брокеру, который поддерживает только MQTT 3.1 (не соответствует 3.1.1), вы должны передать эти дополнительные варианты:
{
protocolId : 'MQIsdp' ,
protocolVersion : 3
}Это подтверждается на Rabbitmq 3.2.4 и на комаре <1,3. Mosquitto версия 1.3 и 1.4 работают без них.
'connect' function (connack) {}
Излучается на успешном (пере) соединении (то есть Connack RC = 0).
connack получил пакет Connack. Когда опция clean Connection является false , а сервер имеет предыдущий сеанс для опции clientId Connection, то флаг connack.sessionPresent - это true . Если это так, вы можете полагаться на сохраненный сеанс и предпочесть не отправлять команды подписки для клиента. 'reconnect' function () {}
Испускается, когда начинается воссоединение.
'close' function () {}
Испускается после отключения.
'disconnect' function (packet) {}
Излучается после получения пакета отключения от брокера. Функция MQTT 5.0.
'offline' function () {}
Излучается, когда клиент выйдет в автономном режиме.
'error' function (error) {}
Излучается, когда клиент не может подключиться (т.е. connack rc! = 0) или когда возникает ошибка анализа.
Следующие ошибки TLS будут излучены как событие error :
ECONNREFUSEDECONNRESETEADDRINUSEENOTFOUND'end' function () {}
Излучается, когда называется mqtt.Client#end() . Если обратный вызов был передан mqtt.Client#end() , это событие испускается после возвращения обратного вызова.
'message' function (topic, message, packet) {}
Излучается, когда клиент получает опубликованный пакет
topic темы полученного пакетаmessage полученного пакетаpacket , как определено в MQTT-Packet 'packetsend' function (packet) {}
Излучается, когда клиент отправляет любой пакет. Это включает в себя.
packet , как определено в MQTT-Packet 'packetreceive' function (packet) {}
Излучается, когда клиент получает какой -либо пакет. Это включает в себя пакеты с подписанных тем, а также пакеты, используемые MQTT для управления подписками и подключениями
packet , как определено в MQTT-Packet По умолчанию клиент подключается при вызываемом конструкторе. Чтобы предотвратить это, вы можете установить опцию manualConnect на true и вызовать client.connect() вручную.
Опубликовать сообщение в тему
topic - тема для публикации, Stringmessage - это сообщение для публикации, Buffer или Stringoptions - это варианты публикации, в том числе:qos Qos Уровень, Number , по умолчанию 0retain сохранить флаг, Boolean , по умолчанию falsedup Mark как дубликат флаг, Boolean , по умолчанию falseproperties : object свойств MQTT 5.0payloadFormatIndicator : полезная нагрузка-это UTF-8, кодируемые данные символов или нет boolean ,messageExpiryInterval : срок службы сообщения приложения в number секунд,topicAlias : значение, которое используется для идентификации темы вместо использования number имени темы,responseTopic : строка, которая используется в качестве имени темы для string сообщения ответа,correlationData : используется отправителем сообщения запроса, чтобы определить, какой запрос отвечает сообщение, когда оно получено binary ,userProperties : Свойство пользователя разрешено появляться несколько раз для представления нескольких имен, объект паров значений, object ,subscriptionIdentifier : представление идентификатора number ,contentType : строка, описывающая содержимое string сообщения приложенияcbStorePut - function () , запускается, когда сообщение помещается в outgoingStore если QoS составляет 1 или 2 .callback - function (err, packet) , запускается при завершении обработки QoS, или при следующей клещете, если Qos 0. Ошибка возникает, если клиент отключается. Асинхронизация publish . Возвращает Promise<Packet | undefined> .
messageId .Подписаться на тему или темы
topic - это String тема для подписки или Array тем, на которые можно подписаться. Это также может быть объектом, он имеет в качестве ключей объекта имя темы и как значение QoS, например {'test1': {qos: 0}, 'test2': {qos: 1}} . Поддерживаются символы подстановочных topic MQTT ( + - для одиночного уровня и # - для многоуровневого)options - это варианты подписки, в том числе:qos QoS -уровень подписки, по умолчанию 0nl Нет локального флага MQTT 5.0 (если значение верно, сообщения приложения не должны быть направлены в соединение с клиентом, равным ClientId публикационного соединения)rap SETANE в виде опубликованного флага MQTT 5.0 (если TRUE TRUE, сообщения приложений, перенаправленные с использованием этой подписки, сохраните флаг сохранившегося, с которым они были опубликованы. Если FALSE, сообщения приложения, перенаправленные с использованием этой подписки, установили флаг поддержания на 0.)rh сохраняет обработку MQTT 5.0 (в этой опции указывается, отправляются ли оставшиеся сообщения при установке подписки.)properties : objectsubscriptionIdentifier : представление идентификатора number ,userProperties : пользовательское свойство разрешено появляться несколько раз для представления нескольких имен, object пары значенийcallback - function (err, granted) обратный вызов, выпущенный в Suback, где:err ошибки подписки или ошибку, возникающая, когда клиент отключаетgranted массив {topic, qos} где:topic подписана на темуqos - это предоставленный уровень QoS на нем Асинхронизация subscribe . Возвращает Promise<ISubscriptionGrant[]> .
Отписаться от темы или тем
topic - это String тема или множество тем, чтобы отписатьсяoptions : варианты отказа от подписки.properties : objectuserProperties : пользовательское свойство разрешено появляться несколько раз для представления нескольких имен, object пары значенийcallback - function (err) , выпущен в Unsuback. Ошибка возникает, если клиент отключается. Асинхронопись unsubscribe . Возвращает Promise<void> .
Закройте клиента, принимает следующие варианты:
force : Передача его True сразу закроет клиента, не дожидаясь, когда будут забраны сообщения в полете. Этот параметр необязательно.options : параметры отключения.reasonCode : отключить number кода разумаproperties : objectsessionExpiryInterval : представление интервала истечения сессии в number секунд,reasonString : представление причины для string отключения,userProperties : Свойство пользователя разрешено появляться несколько раз для представления нескольких имен, объект паров значений, object ,serverReference : String, которая может использоваться клиентом для идентификации другого сервера для использования stringcallback : будет вызван, когда клиент будет закрыт. Этот параметр необязательно. Асинхронное end . Возвращает Promise<void> .
Удалите сообщение из исходящей Store. Исходящий обратный вызов будет вызван с ошибкой («Сообщение удалено»), если сообщение будет удалено.
После того, как эта функция вызвана, сообщается и становится повторно использование.
mId : Сообщение сообщения в исходящей стойке.Подключитесь снова, используя те же параметры, что и Connect ()
Обработайте сообщения с поддержкой обратного давления, по одному. Переопределите по желанию, но всегда вызовите callback , иначе клиент будет зависеть.
Boolean: установите true если клиент подключен. false иначе.
Номер: Получить идентификатор последнего сообщения. Это только для отправленных сообщений.
Boolean: установите на true , если клиент пытается воссоединиться с сервером. false иначе.
Внедрение в памяти магазина сообщений.
options - это параметры магазина:clean : true , чистые сообщения для изолированных возможностей, когда называется закрыто (по умолчанию true ) Другие реализации mqtt.Store :
Добавляет пакет в магазин, пакет - это все, что имеет свойство messageId . Обратный вызов вызывается, когда пакет хранится.
Создает поток со всеми пакетами в магазине.
Удаляет пакет из магазина, пакет - это все, что имеет свойство messageId . Обратный вызов вызывается, когда пакет был удален.
Закрывает магазин.
Важный
Единственный протокол, поддерживаемый в браузерах, - это MQTT по веб -окетам, поэтому вы должны использовать протоколы ws:// или wss:// .
В то время как модуль WS используется в Nodejs, WebSocket используется в браузерах. Это полностью прозрачно для пользователей, кроме следующего:
wsOption не поддерживается в браузерах.
Браузеры не позволяют ловить многие ошибки WebSocket по соображениям безопасности как:
Доступ к этой информации может позволить злонамеренной веб-странице получить информацию о вашей сети, поэтому они требуют, чтобы браузеры сообщали о всех ошибках времени подключения неразличимым способом.
Таким образом, прослушивание client.on('error') может не поймать все ошибки, которые вы получите в nodejs env.
MQTT.JS связан с использованием ESBUILD. Он проверяется, работая со всеми бундлерами, такими как WebPack, Vite и React.
Вы можете найти все версии пакетов MQTT в папке dist :
mqtt.js - IIFE FORMAT, не минимумmqtt.min.js - IIFE FORMAT, MINISIDmqtt.esm.js - Format ESM MINIDEDНачиная с MQTT.JS> 5.2.0 Вы можете импортировать MQTT в своем коде, как это:
import mqtt from 'mqtt'Это будет автоматически обрабатываться вашим бундлером.
В противном случае вы можете использовать конкретный пакет, подобный:
import * as mqtt from 'mqtt/dist/mqtt'
import * as mqtt from 'mqtt/dist/mqtt.min'
import mqtt from 'mqtt/dist/mqtt.esm'Пакет MQTT.JS доступен через http://unpkg.com, в частности на https://unpkg.com/mqtt/dist/mqtt.min.js. Смотрите http://unpkg.com для полной документации по версии.
Вот как работает QoS:
О потреблении данных, очевидно, QoS 2> QoS 1> QoS 0, если это вам беспокойство.
Начиная с V5, этот проект записан в TypeScript, а определения типа включены в пакет.
Пример:
import { connect } from "mqtt"
const client = connect ( 'mqtt://test.mosquitto.org' ) Поддерживает WeChat Mini Program. Используйте протокол wxs . Смотрите документы 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
} ) ; Поддерживает Ali Mini Program. Используйте протокол alis . Смотрите документы Alipay.
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "alis://test.mosquitto.org" ) ; MQTT.JS - это проект с открытым исходным кодом . Это означает, что:
Лица, делающие значительные и ценные вклады, получают обязательство для проекта, чтобы внести свой вклад по своему усмотрению. Этот проект больше похож на открытый вики, чем на стандартный охраняемый проект с открытым исходным кодом.
См. Файл appling.md для получения более подробной информации.
MQTT.JS возможен только из -за превосходной работы следующих участников:
| Имя | GitHub | |
|---|---|---|
| Адам Радд | Github/Adamvr | Twitter/@ADAM_VR |
| Маттео Коллина | GitHub/McOllina | Twitter/@Matteocollina |
| Максим Агор | Github/4rzael | Twitter/@4rzael |
| Siarhei Buntsevich | GitHub/Scarry1992 | |
| Даниэль Ландо | Github/Robertslando |
Если вы хотите поддержать MQTT.JS, пожалуйста, рассмотрите возможность спонсировать автора и активных сопровождающих:
Грань