MQTT.JS adalah perpustakaan klien untuk protokol MQTT, ditulis dalam JavaScript untuk Node.js dan browser.
MQTT.JS adalah proyek open source terbuka, lihat bagian yang berkontribusi untuk mencari tahu apa artinya ini.
V5.0.0 (07/2023)
MqttClient new sekarang diperlukan.v4.0.0 (dirilis 04/2020) menghapus dukungan untuk semua versi ujung node kehidupan, dan sekarang mendukung Node V12 dan V14. Ini juga menambah peningkatan logging debug, bersama dengan beberapa tambahan fitur.
Sebagai perubahan yang melanggar , secara default penangan kesalahan dibangun ke dalam klien MQTT.JS, jadi jika ada kesalahan yang dipancarkan dan pengguna belum membuat penangan acara pada klien untuk kesalahan, klien tidak akan pecah sebagai akibat dari kesalahan yang tidak ditangani. Selain itu, kesalahan TLS yang khas seperti ECONNREFUSED , ECONNRESET telah ditambahkan ke daftar kesalahan TLS yang akan dipancarkan dari klien MQTT.JS, dan karenanya dapat ditangani sebagai kesalahan koneksi.
V3.0.0 menambahkan dukungan untuk MQTT 5, dukungan untuk Node V10.X, dan banyak perbaikan untuk meningkatkan keandalan.
Catatan: Dukungan MQTT V5 bersifat eksperimental karena belum diimplementasikan oleh broker.
V2.0.0 Menghapus Dukungan untuk Node V0.8, V0.10 dan V0.12, dan 3x lebih cepat dalam pengiriman paket. Ini juga menghilangkan semua fungsionalitas yang sudah usang di V1.0.0, terutama mqtt.createConnection dan mqtt.Server . Dari v2.0.0, langganan dipulihkan setelah koneksi kembali jika clean: true . V1.XX sekarang ada di LTS , dan itu akan terus didukung selama pengguna V0.8, V0.10 dan V0.12.
Sebagai perubahan besar , opsi encoding pada klien lama dihapus, dan sekarang semuanya adalah UTF-8 dengan pengecualian password dalam pesan Connect dan payload dalam pesan publikasi, yang merupakan Buffer .
Perubahan lain yang melanggar adalah bahwa MQTT.JS sekarang default ke MQTT v3.1.1, jadi untuk mendukung broker lama, silakan baca dokumen Opsi Klien.
v1.0.0 meningkatkan arsitektur keseluruhan proyek, yang sekarang dibagi menjadi tiga komponen: MQTT.js menjaga klien, koneksi MQTT mencakup kode koneksi barebone untuk penggunaan sisi server, dan mqtt-packet mencakup parser dan generator protokol. Klien baru meningkatkan kinerja dengan faktor 30%, Embeds Websocket Support (MOW sekarang sudah usang), dan memiliki dukungan yang lebih baik untuk QoS 1 dan 2. API sebelumnya masih didukung tetapi sudah usang, dengan demikian, tidak didokumentasikan dalam Readme ini.
npm install mqtt --saveDemi kesederhanaan, mari kita taruh pelanggan dan penerbit dalam file yang sama:
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 ( ) ;
} ) ;keluaran:
Hello mqttMQTT.js dapat digunakan dalam aplikasi asli React. Untuk menggunakannya, lihat contoh react asli
Jika Anda ingin menjalankan broker MQTT Anda sendiri, Anda dapat menggunakan Mosquitto atau Aedes-Cli, dan meluncurkannya.
Anda juga dapat menggunakan instance tes: test.mosquitto.org.
Jika Anda tidak ingin menginstal broker terpisah, Anda dapat mencoba menggunakan 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 menggabungkan perintah untuk berinteraksi dengan broker. Agar tersedia di jalur Anda, Anda harus menginstal mqtt.js secara global:
npm install mqtt -gKemudian, di satu terminal
mqtt sub -t ' hello ' -h ' test.mosquitto.org ' -vDi yang lain
mqtt pub -t ' hello ' -h ' test.mosquitto.org ' -m ' from MQTT.js ' Lihat mqtt help <command> untuk bantuan perintah.
MQTT.JS menggunakan paket debug untuk tujuan debugging. Untuk mengaktifkan log debug, tambahkan variabel lingkungan berikut pada runtime:
# ( example using PowerShell, the VS Code default )
$env:DEBUG='mqttjs*' Bagian penting dari koneksi Websocket adalah apa yang harus dilakukan ketika koneksi turun dan klien perlu terhubung kembali. MQTT memiliki dukungan koneksi kembali bawaan yang dapat dikonfigurasi untuk berperilaku dengan cara yang sesuai dengan aplikasi.
transformWsUrl (hanya WebSocket)Ketika koneksi MQTT turun dan perlu terhubung kembali, umum untuk mensyaratkan bahwa otentikasi apa pun yang terkait dengan koneksi tetap terkini dengan mekanisme auth yang mendasarinya. Misalnya beberapa aplikasi dapat melewati token auth dengan opsi koneksi pada koneksi awal, sementara layanan cloud lainnya mungkin memerlukan URL ditandatangani dengan setiap koneksi.
Pada saat penyisihan kembali terjadi di siklus hidup aplikasi, data auth asli mungkin telah kedaluwarsa.
Untuk mengatasi ini, kami dapat menggunakan pengait yang disebut transformWsUrl untuk memanipulasi salah satu URL koneksi atau opsi klien pada saat terhubung kembali.
Contoh (Perbarui ClientID & Nama Pengguna pada setiap penghubung kembali):
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 ,
} );Sekarang setiap kali koneksi Websocket baru dibuka (semoga tidak terlalu sering), kami akan mendapatkan URL baru yang ditandatangani atau data token auth segar.
Catatan: Saat ini kait ini tidak mendukung janji, yang berarti bahwa untuk menggunakan token Auth terbaru, Anda harus memiliki beberapa mekanisme luar yang menangani otentikasi tingkat aplikasi menyegarkan sehingga koneksi WebSocket dapat dengan mudah mengambil token valid terbaru atau URL yang ditandatangani.
createWebsocket (Websocket saja)Ketika Anda perlu menambahkan subprotocol atau header Websocket khusus untuk membuka koneksi melalui proxy dengan otentikasi khusus, panggilan balik ini memungkinkan Anda membuat instance Websocket yang akan digunakan di klien 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 Untuk memastikan bahwa klien MQTT secara otomatis mencoba untuk menghubungkan kembali ketika koneksi dijatuhkan, Anda harus mengatur opsi klien reconnectPeriod ke nilai yang lebih besar dari 0. Nilai 0 akan menonaktifkan kembali dan kemudian mengakhiri koneksi akhir ketika turun.
Nilai default adalah 1000 ms yang berarti akan mencoba untuk menghubungkan kembali 1 detik setelah kehilangan koneksi.
Perhatikan bahwa ini hanya akan memungkinkan koneksi kembali setelah batas waktu koneksi, atau setelah koneksi yang berhasil. Ini tidak akan (secara default) memungkinkan menceritakan kembali koneksi yang secara aktif ditolak dengan kesalahan Connack oleh server.
Untuk juga mengaktifkan koneksi ulang otomatis untuk kesalahan Connack, atur reconnectOnConnackError: true .
Jika klien menetapkan opsi autoUseTopicAlias:true maka mqtt.js menggunakan topik alias yang ada secara otomatis.
Skenario contoh:
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)Pengguna tidak perlu mengelola topik mana yang dipetakan ke topik alias mana. Jika pengguna ingin mendaftarkan alias topik, maka publikasikan topik dengan alias topik. Jika pengguna ingin menggunakan alias topik, maka publikasikan topik tanpa alias topik. Jika ada alias topik yang dipetakan maka menambahkannya sebagai properti dan perbarui topik untuk mengosongkan string.
Jika klien menetapkan opsi autoAssignTopicAlias:true maka mqtt.js menggunakan topik yang ada alias secara otomatis. Jika tidak ada topik alias, maka tetapkan topik kosong baru alias secara otomatis. Jika alias topik sepenuhnya digunakan, maka entri LRU (paling baru digunakan) Topic-Alias ditimpa.
Skenario contoh:
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)Pengguna juga dapat mendaftarkan pasangan alias topik secara manual menggunakan topik publikasi: 'beberapa', ta: x. Ini bekerja dengan baik dengan Alias Alias Automatic Assign.
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()Terhubung ke broker yang ditentukan oleh URL dan opsi yang diberikan dan mengembalikan klien.
URL dapat berada pada protokol berikut: 'mqtt', 'mqtts', 'tcp', 'tls', 'ws', 'wss', 'wxs', 'alis'. Jika Anda mencoba untuk terhubung ke soket UNIX, cukup tambahkan akhir +unix ke protokol (mis: mqtt+unix ). Ini akan mengatur properti unixSocket secara otomatis.
URL juga dapat menjadi objek seperti yang dikembalikan oleh URL.parse() , dalam hal kedua objek digabungkan, yaitu Anda dapat melewati satu objek dengan URL dan opsi koneksi.
Anda juga dapat menentukan opsi servers dengan konten: [{ host: 'localhost', port: 1883 }, ... ] , dalam hal ini array diulangi di setiap koneksi.
Untuk semua opsi terkait MQTT, lihat konstruktor klien.
Pembungkus asinkron di sekitar fungsi connect .
Mengembalikan Promise yang diselesaikan menjadi contoh mqtt.Client ketika klien menembakkan peristiwa 'connect' atau 'end' , atau menolak dengan kesalahan jika 'error' ditembakkan.
Perhatikan bahwa opsi manualConnect akan menyebabkan janji yang dikembalikan oleh fungsi ini tidak pernah menyelesaikan atau menolak karena klien yang mendasarinya tidak pernah menembakkan peristiwa apa pun.
Kelas Client membungkus koneksi klien ke broker MQTT melalui metode transportasi sewenang -wenang (TCP, TLS, WebSocket, ECC). Client adalah Eventemitter yang memiliki acara sendiri
Client secara otomatis menangani yang berikut:
Argumennya adalah:
streamBuilder adalah fungsi yang mengembalikan subclass dari kelas Stream yang mendukung acara connect . Biasanya net.Socket .options adalah opsi koneksi klien (lihat: Paket Connect). Default: wsOptions : adalah opsi koneksi WebSocket. Default adalah {} . Ini spesifik untuk websockets. Untuk opsi yang memungkinkan, lihatlah: https://github.com/websockets/ws/blob/master/doc/ws.md.
keepalive : 60 detik, diatur ke 0 untuk menonaktifkan
reschedulePings : Pesan Ping Penjebak Ulang Setelah Mengirim Paket (Default true )
clientId : 'mqttjs_' + Math.random().toString(16).substr(2, 8)
protocolId : 'MQTT'
protocolVersion : 4
clean : true , diatur ke false untuk menerima pesan QoS 1 dan 2 saat offline
reconnectPeriod : 1000 milidetik, interval antara dua koneksi. Nonaktifkan kembali secara otomatis dengan mengatur ke 0 .
reconnectOnConnackError : false , apakah juga akan terhubung kembali jika Connack diterima dengan kesalahan.
connectTimeout : 30 * 1000 milidetik, waktu untuk menunggu sebelum Connack diterima
username : Nama pengguna yang diperlukan oleh broker Anda, jika ada
password : Kata sandi yang diperlukan oleh broker Anda, jika ada
incomingStore : Toko untuk paket yang masuk
outgoingStore : Toko untuk paket keluar
queueQoSZero : Jika koneksi rusak, antrian keluar pesan nol QoS (default true )
customHandleAcks : MQTT 5 Fitur Penanganan Kustom Puback dan Pubrec Packets. Callback -nya:
customHandleAcks: function ( topic , message , packet , done ) { /*some logic with calling done(error, reasonCode)*/ } autoUseTopicAlias : Mengaktifkan alias topik otomatis menggunakan fungsionalitas
autoAssignTopicAlias : Mengaktifkan Topik Otomatis Alias Tetapkan Fungsionalitas
properties : Properties MQTT 5.0. object yang mendukung properti berikut:
sessionExpiryInterval : Mewakili interval sesi kedaluwarsa dalam number detik,receiveMaximum : Mewakili number nilai maksimum menerima,maximumPacketSize : Mewakili ukuran paket maksimum yang bersedia menerima number klien,topicAliasMaximum : Mewakili Topik Alias Nilai maksimum menunjukkan nilai tertinggi yang akan diterima klien sebagai topik alias yang dikirim oleh number server,requestResponseInformation : Klien menggunakan nilai ini untuk meminta server mengembalikan informasi respons di Connack boolean ,requestProblemInformation : Klien menggunakan nilai ini untuk menunjukkan apakah string alasan atau properti pengguna dikirim dalam kasus kegagalan boolean ,userProperties : Properti Pengguna diizinkan muncul beberapa kali untuk mewakili beberapa nama, object pasangan nilai,authenticationMethod : Nama metode otentikasi yang digunakan untuk string otentikasi yang diperluas,authenticationData : Data biner yang berisi binary data otentikasi authPacket : Pengaturan untuk object Paket Auth
will : Pesan yang akan dikirim oleh broker secara otomatis ketika klien memutuskan dengan buruk. Formatnya adalah:
topic : Topik untuk Diterbitkanpayload : Pesan untuk diterbitkanqos : QoSretain : Bendera mempertahankanproperties : Properti Will oleh MQTT 5.0:willDelayInterval : Mewakili interval penundaan akan dalam number detik,payloadFormatIndicator : Will Message adalah data karakter yang dikodekan UTF-8 atau tidak boolean ,messageExpiryInterval : Nilai adalah masa pakai pesan Will dalam hitungan detik dan dikirim sebagai interval kadaluwarsa publikasi ketika server menerbitkan number pesan Will,contentType : Menjelaskan konten string pesan Will,responseTopic : String yang digunakan sebagai nama topik untuk string pesan respons,correlationData : Data korelasi digunakan oleh pengirim pesan permintaan untuk mengidentifikasi permintaan yang diminta pesan respons saat diterima binary ,userProperties : Properti Pengguna diizinkan muncul beberapa kali untuk mewakili beberapa nama, object pasangan nilai transformWsUrl : Opsional (url, options, client) => url hanya untuk protokol WS/WSS. Dapat digunakan untuk mengimplementasikan URL penandatanganan yang setelah terhubung kembali dapat menjadi kedaluwarsa.
createWebsocket : url, websocketSubProtocols, options) => Websocket hanya untuk protokol WS/WSS. Dapat digunakan untuk mengimplementasikan subprotocol atau implementasi Websocket khusus.
resubscribe : Jika koneksi rusak dan terhubung kembali, topik berlangganan secara otomatis berlangganan lagi (default true )
messageIdProvider : Penyedia MessageID Kustom. Ketika new UniqueMessageIdProvider() ditetapkan, maka pesan non konflik disediakan.
log : Fungsi log khusus. Default menggunakan paket debug.
manualConnect : Mencegah konstruktor untuk menghubungi connect . Dalam hal ini setelah mqtt.connect dipanggil Anda harus menelepon client.connect .
timerVariant : Default ke auto , mana yang mencoba menentukan timer mana yang paling tepat untuk lingkungan Anda, jika Anda mengalami masalah deteksi, Anda dapat mengaturnya ke worker atau native . Jika tidak ada yang cocok untuk Anda, Anda dapat melewati objek timer dengan set dan menghapus properti:
timerVariant: {
set : ( func , timer ) => setInterval ( func , timer ) ,
clear : ( id ) => clearInterval ( id )
} forceNativeWebSocket : Setel ke true jika Anda mengalami masalah deteksi (yaitu ws does not work in the browser ) untuk memaksa penggunaan Websocket asli. Penting untuk dicatat bahwa jika diatur ke true untuk klien pertama yang dibuat, maka semua klien akan menggunakan Websocket asli. Dan sebaliknya, jika tidak diatur atau diatur ke false, semua akan menggunakan hasil deteksi.
unixSocket : Jika Anda ingin terhubung ke soket unix, atur ini ke true
Dalam hal MQTTS (MQTT lebih dari TLS) diperlukan, objek options diteruskan ke tls.connect() . Jika menggunakan sertifikat yang ditandatangani sendiri , atur rejectUnauthorized: false . Namun, berhati -hatilah karena ini memaparkan Anda pada potensi manusia dalam serangan tengah dan tidak direkomendasikan untuk produksi.
Bagi mereka yang mendukung beberapa protokol TLS pada satu port, seperti MQTTS dan MQTT di atas WSS, menggunakan opsi ALPNProtocols . Ini memungkinkan Anda mendefinisikan protokol negosiasi Protokol Lapisan Aplikasi (ALPN). Anda dapat mengatur ALPNProtocols sebagai array string, buffer, atau uint8Array berdasarkan pengaturan Anda.
Jika Anda terhubung ke broker yang hanya mendukung MQTT 3.1 (bukan 3.1.1 sesuai), Anda harus melewati opsi tambahan ini:
{
protocolId : 'MQIsdp' ,
protocolVersion : 3
}Ini dikonfirmasi pada RabbitMQ 3.2.4, dan pada Mosquitto <1,3. Mosquitto Versi 1.3 dan 1.4 berfungsi dengan baik tanpa itu.
'connect' function (connack) {}
Dipancarkan pada koneksi sukses (re) (yaitu Connack RC = 0).
connack menerima paket Connack. Ketika opsi koneksi clean false dan server memiliki sesi sebelumnya untuk opsi koneksi clientId , maka connack.sessionPresent Flag true . Ketika itu masalahnya, Anda dapat mengandalkan sesi yang disimpan dan lebih suka untuk tidak mengirim perintah berlangganan untuk klien. 'reconnect' function () {}
Dipancarkan saat koneksi kembali dimulai.
'close' function () {}
Dipancarkan setelah pemutusan.
'disconnect' function (packet) {}
Dipancarkan setelah menerima paket putuskan dari broker. Fitur MQTT 5.0.
'offline' function () {}
Dipancarkan saat klien berjalan offline.
'error' function (error) {}
Dipancarkan ketika klien tidak dapat terhubung (yaitu Connack RC! = 0) atau ketika kesalahan parsing terjadi.
Kesalahan TLS berikut akan dipancarkan sebagai peristiwa error :
ECONNREFUSEDECONNRESETEADDRINUSEENOTFOUND'end' function () {}
Dipancarkan saat mqtt.Client#end() dipanggil. Jika panggilan balik diteruskan ke mqtt.Client#end() , acara ini dipancarkan setelah panggilan balik kembali.
'message' acara function (topic, message, packet) {}
Dipancarkan saat klien menerima paket publikasi
topic topik paket yang diterimamessage dari paket yang diterimapacket menerima paket, sebagaimana didefinisikan dalam paket mqtt 'packetsend' function (packet) {}
Dipancarkan saat klien mengirim paket apa pun. Ini termasuk paket .published () serta paket yang digunakan oleh MQTT untuk mengelola langganan dan koneksi
packet menerima paket, sebagaimana didefinisikan dalam paket mqtt 'packetreceive' function (packet) {}
Dipancarkan saat klien menerima paket apa pun. Ini termasuk paket dari topik berlangganan serta paket yang digunakan oleh MQTT untuk mengelola langganan dan koneksi
packet menerima paket, sebagaimana didefinisikan dalam paket mqtt Secara default klien terhubung saat konstruktor dipanggil. Untuk mencegah ini, Anda dapat mengatur opsi manualConnect ke true dan hubungi client.connect() secara manual.
Publikasikan pesan ke suatu topik
topic adalah topik yang harus diterbitkan, Stringmessage adalah pesan untuk diterbitkan, Buffer atau Stringoptions adalah opsi untuk diterbitkan, termasuk:qos QoS, Number , Default 0retain bendera, Boolean , false defaultdup sebagai duplikat bendera, Boolean , default falseproperties : object MQTT 5.0 PropertiespayloadFormatIndicator : Payload adalah data karakter yang dikodekan UTF-8 atau tidak boolean ,messageExpiryInterval : Seumur Hidup Pesan Aplikasi dalam number detik,topicAlias : Nilai yang digunakan untuk mengidentifikasi topik alih -alih menggunakan number nama topik,responseTopic : String yang digunakan sebagai nama topik untuk string pesan respons,correlationData : Digunakan oleh pengirim pesan permintaan untuk mengidentifikasi permintaan yang diminta pesan untuk saat diterima binary ,userProperties : Properti Pengguna diizinkan muncul beberapa kali untuk mewakili beberapa nama, object pasangan nilai,subscriptionIdentifier : Mewakili pengidentifikasi number berlangganan,contentType : String yang menjelaskan konten string pesan aplikasicbStorePut - function () , dipecat saat pesan dimasukkan ke outgoingStore jika QoS adalah 1 atau 2 .callback - function (err, packet) , dipecat ketika penanganan QoS selesai, atau pada kutu berikutnya jika QoS 0. Kesalahan terjadi jika klien terputus. publish Async. Mengembalikan Promise<Packet | undefined> .
messageId .Berlangganan topik atau topik
topic adalah topik String yang harus berlangganan atau Array topik untuk berlangganan. Ini juga bisa menjadi objek, ia memiliki kunci objek nama topik dan sebagai nilai qos, seperti {'test1': {qos: 0}, 'test2': {qos: 1}} . MQTT topic Wildcard karakter didukung ( + - untuk level tunggal dan # - untuk multi level)options adalah opsi untuk berlangganan, termasuk:qos QoS, default 0nl No Local MQTT 5.0 Bendera (jika nilainya benar, pesan aplikasi tidak boleh diteruskan ke koneksi dengan klien yang sama dengan klien Koneksi penerbitan)rap REPAN Seperti yang diterbitkan Bendera MQTT 5.0 (jika benar, pesan aplikasi yang diteruskan menggunakan langganan ini tetap pertahankan bendera yang diterbitkan. Jika salah, pesan aplikasi yang diteruskan menggunakan langganan ini memiliki bendera mempertahankan ke 0.)rh mempertahankan penanganan MQTT 5.0 (opsi ini menentukan apakah pesan yang ditahan dikirim ketika berlangganan ditetapkan.)properties : objectsubscriptionIdentifier : Mewakili pengidentifikasi number berlangganan,userProperties : Properti Pengguna diizinkan muncul beberapa kali untuk mewakili beberapa nama, object pasangan nilaicallback - function (err, granted) Callback dipecat di Suback di mana:err kesalahan berlangganan atau kesalahan yang terjadi saat klien memutuskan hubungangranted adalah array {topic, qos} di mana:topic adalah berlangganan topikqos adalah level QoS yang diberikan di atasnya Async subscribe . Mengembalikan Promise<ISubscriptionGrant[]> .
Berhenti berlangganan dari topik atau topik
topic adalah topik String atau serangkaian topik untuk berhenti berlanggananoptions : Opsi berhenti berlangganan.properties : objectuserProperties : Properti Pengguna diizinkan muncul beberapa kali untuk mewakili beberapa nama, object pasangan nilaicallback - function (err) , ditembakkan di Unsuback. Kesalahan terjadi jika klien terputus. Async unsubscribe . Mengembalikan Promise<void> .
Tutup klien, terima opsi berikut:
force : Melewati true akan segera menutup klien, tanpa menunggu pesan dalam penerbangan untuk diaduk. Parameter ini opsional.options : Opsi pemutusan.reasonCode : Putuskan number Kode Alasanproperties : objectsessionExpiryInterval : Mewakili interval sesi kedaluwarsa dalam number detik,reasonString : Mewakili alasan string pemutusan,userProperties : Properti Pengguna diizinkan muncul beberapa kali untuk mewakili beberapa nama, object pasangan nilai,serverReference : String yang dapat digunakan oleh klien untuk mengidentifikasi server lain untuk menggunakan stringcallback : Akan dipanggil saat klien ditutup. Parameter ini opsional. end Async. Mengembalikan Promise<void> .
Hapus pesan dari toko keluar. Panggilan balik keluar akan dipanggil dengan kesalahan ('pesan dihapus') jika pesan dihapus.
Setelah fungsi ini dipanggil, MessageID dirilis dan dapat digunakan kembali.
mId : MessageID dari pesan di toko keluar.Hubungkan lagi menggunakan opsi yang sama seperti Connect ()
Tangani pesan dengan dukungan tekanan balik, satu per satu. Override sesuka hati, tetapi selalu menelepon callback , atau klien akan menggantung.
Boolean: Setel ke true jika klien terhubung. false sebaliknya.
Nomor: Dapatkan ID Pesan Terakhir. Ini hanya untuk pesan terkirim.
Boolean: Setel ke true jika klien mencoba untuk terhubung kembali ke server. false sebaliknya.
Implementasi dalam memori dari toko pesan.
options adalah opsi toko:clean : true , Pesan Bersihkan Inflight Saat Tutup Disebut (Default true ) Implementasi mqtt.Store lainnya:
Menambahkan paket ke toko, paket adalah apa pun yang memiliki properti messageId . Panggilan balik dipanggil ketika paket telah disimpan.
Membuat aliran dengan semua paket di toko.
Menghapus paket dari toko, paket adalah apa pun yang memiliki properti messageId . Panggilan balik dipanggil ketika paket telah dihapus.
Menutup toko.
Penting
Satu -satunya protokol yang didukung di browser adalah MQTT di atas websockets, jadi Anda harus menggunakan protokol ws:// atau wss:// .
Sementara modul WS digunakan di NodeJs, Websocket digunakan di browser. Ini benar -benar transparan untuk pengguna kecuali untuk yang berikut:
wsOption tidak didukung di browser.
Browser tidak mengizinkan untuk menangkap banyak kesalahan websocket karena alasan keamanan sebagai:
Akses ke informasi ini dapat memungkinkan halaman web berbahaya untuk mendapatkan informasi tentang jaringan Anda, sehingga mereka memerlukan browser melaporkan semua kesalahan waktu koneksi dengan cara yang tidak dapat dibedakan.
Jadi mendengarkan client.on('error') tidak dapat menangkap semua kesalahan yang akan Anda dapatkan di nodeJs env.
MQTT.JS dibundel menggunakan Esbuild. Diuji bekerja dengan semua bundler seperti Webpack, Vite dan React.
Anda dapat menemukan semua versi Bundles MQTT di folder dist :
mqtt.js - format IIFE, tidak terpencilmqtt.min.js - format iife, minifiedmqtt.esm.js - Format ESM MinifiedMulai dari mqtt.js> 5.2.0 Anda dapat mengimpor MQTT dalam kode Anda seperti ini:
import mqtt from 'mqtt'Ini akan ditangani secara otomatis oleh bundler Anda.
Kalau tidak, Anda dapat memilih untuk menggunakan bundel tertentu seperti:
import * as mqtt from 'mqtt/dist/mqtt'
import * as mqtt from 'mqtt/dist/mqtt.min'
import mqtt from 'mqtt/dist/mqtt.esm'Bundel MQTT.JS tersedia melalui http://unpkg.com, khususnya di https://unpkg.com/mqtt/dist/mqtt.min.js. Lihat http://unpkg.com untuk dokumentasi lengkap tentang rentang versi.
Begini cara kerja QoS:
Tentang konsumsi data, jelas, QoS 2> QoS 1> QoS 0, jika itu menjadi perhatian Anda.
Mulai dari V5 proyek ini ditulis dalam TypeScript dan definisi tipe termasuk dalam paket.
Contoh:
import { connect } from "mqtt"
const client = connect ( 'mqtt://test.mosquitto.org' ) Mendukung Program Mini WeChat. Gunakan protokol wxs . Lihat dokumen 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
} ) ; Mendukung program Mini ALI. Gunakan protokol alis . Lihat Dokumen Alipay.
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "alis://test.mosquitto.org" ) ; MQTT.JS adalah proyek open source terbuka . Ini berarti bahwa:
Individu yang memberikan kontribusi yang signifikan dan berharga diberikan akses komit untuk proyek untuk berkontribusi sesuai keinginan mereka. Proyek ini lebih seperti wiki terbuka daripada proyek open source standar yang dijaga.
Lihat file Contributing.md untuk lebih jelasnya.
Mqtt.js hanya mungkin karena pekerjaan yang sangat baik dari kontributor berikut:
| Nama | GitHub | |
|---|---|---|
| Adam Rudd | GitHub/Adamvr | Twitter/@adam_vr |
| Matteo Collina | GitHub/McIllina | Twitter/@Matteocollina |
| Agor Maxime | GitHub/4rzael | Twitter/@4rzael |
| Siarhei Buntsevich | GitHub/Scarry1992 | |
| Daniel Lando | GitHub/Robertslando |
Jika Anda ingin mendukung mqtt.js, silakan pertimbangkan untuk mensponsori penulis dan pemelihara aktif:
Mit