Materi di bawah ini adalah kelanjutan dari artikel tentang fungsionalitas yang ditambahkan di versi baru MQTTv5.0. Jika Anda telah mempelajarinya, maka tidak akan sulit bagi Anda untuk memperhatikan bahwa sebagian besar fungsi baru didasarkan pada konsep properti yang dapat ditambahkan ke paket. Pada artikel ini, kami akan menganalisisnya secara detail.
Approx. - Artikel ini ditujukan bagi mereka yang memiliki minat atau ingin mendalami seluk-beluk MQTT. Tidak akan ada penyimpangan gambar dan lirik di sini, hanya hardcore !!!
Di bawah ini adalah tabel semua properti ( lihat bagian 2.2.2.2 dalam spesifikasi ).
| Indo | Nama | Tipe data | Paket / Will Properties |
| 1 | Indikator Format Muatan | Byte | PUBLISH, Will Properties |
| 2 | Interval Kedaluwarsa Pesan | Empat Byte Integer | PUBLISH, Will Properties |
| 3 | Jenis konten | String Tersandi UTF-8 | PUBLISH, Will Properties |
| 8 | Topik tanggapan | String Tersandi UTF-8 | PUBLISH, Will Properties |
| sembilan | Data Korelasi | Data Biner | PUBLISH, Will Properties |
| sebelas | Pengenal Langganan | Variabel Byte Integer | PUBLIKASIKAN, BERLANGGANAN |
| 17 | Interval Kedaluwarsa Sesi | Empat Byte Integer | HUBUNGKAN, HUBUNGKAN, PUTUSKAN |
| delapan belas | Pengenal Klien yang Ditugaskan | String Tersandi UTF-8 | CONNACK |
| 19 | Server Tetap Hidup | Two Byte Integer | CONNACK |
| 21 | Metode Otentikasi | String Tersandi UTF-8 | CONNECT, CONNACK, AUTH |
| 22 | Data Otentikasi | Data Biner | CONNECT, CONNACK, AUTH |
| 23 | Minta Informasi Masalah | Byte | MENGHUBUNG |
| 24 | Akan Menunda Interval | Empat Byte Integer | Akan properti |
| 25 | Minta Informasi Tanggapan | Byte | MENGHUBUNG |
| 26 | Informasi Tanggapan | String Tersandi UTF-8 | CONNACK |
| 28 | Referensi Server | String Tersandi UTF-8 | HUBUNGKAN, PUTUSKAN |
| 31 | String Alasan | String Tersandi UTF-8 | CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBACK, UNSUBACK, DISCONNECT, AUTH |
| 33 | Terima Maksimum | Two Byte Integer | HUBUNGKAN, CONNACK |
| 34 | Alias topik maksimum | Two Byte Integer | HUBUNGKAN, CONNACK |
| 35 | Alias topik | Two Byte Integer | MENERBITKAN |
| 36 | QoS maksimum | Byte | CONNACK |
| 37 | Mempertahankan Tersedia | Byte | CONNACK |
| 38 | Properti Pengguna | Pasangan String UTF-8 | CONNECT, CONNACK, PUBLISH, Will Properties, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, DISCONNECT, AUTH |
| 39 | Ukuran Paket Maksimum | Empat Byte Integer | HUBUNGKAN, CONNACK |
| 40 | Tersedia Langganan Wildcard | Byte | CONNACK |
| 41 | Pengenal Langganan Tersedia | Byte | CONNACK |
| 42 | Tersedia Langganan Bersama | Byte | CONNACK |
Sekarang mari kita lihat lebih dekat.
Indikator Format Muatan - indikator format muatan
- 0 - data adalah sekumpulan byte yang tidak ditentukan, yang setara dengan tidak mengirimkan indikator format payload,
- 1 - Datanya adalah data karakter berenkode UTF-8.
Interval Kedaluwarsa Pesan - interval kedaluwarsa pesan
Angka yang mewakili interval kedaluwarsa pesan (dalam detik).
Jika interval kedaluwarsa pesan telah lewat dan server tidak dapat mengirimkan pesan ke pelanggan yang benar, itu harus menghapus pesan untuk pelanggan itu.
Tipe Konten - tipe konten
Nilai tipe konten ditentukan oleh klien pengirim dan penerima.
Topik Tanggapan - topik tanggapan
String UTF-8 yang digunakan sebagai topik untuk pesan balasan.
Penerima pesan dengan topik yang ditentukan untuk balasan mengirimkan balasannya, menggunakan topik ini sebagai topik terbitannya.
Interaksi permintaan / tanggapan dalam kasus ini terjadi sebagai berikut ( lihat klausul 4.10.1 dalam spesifikasi ):
- Klien (pengirim) menerbitkan pesan permintaan dengan beberapa topik, yang menentukan topik untuk respons.
- () , , . . , .
- , , .
- . - . , .
Correlation Data —
Data korelasi digunakan oleh pengirim pesan permintaan untuk menentukan permintaan mana dari pesan respon itu ketika diterima. Jika tidak ada data korelasi, maka pemohon tidak memerlukan data korelasi apapun.
Jika pesan permintaan berisi data korelasi, penerima juga harus menyertakan data korelasi sebagai properti dalam paket PUBLIKASIKAN dari pesan respons.
Nilai data korelasi hanya berarti bagi pengirim pesan permintaan dan penerima pesan tanggapan.
Subscription Identifier - pengidentifikasi langganan
Nomor yang mewakili ID langganan.
Jika publikasi adalah hasil dari pertandingan dengan lebih dari satu langganan, beberapa ID langganan akan ditentukan, dalam hal ini urutannya tidak menjadi masalah.
Pelanggan juga dapat membuat beberapa langganan yang cocok dengan publikasi tertentu dan menggunakan pengenal yang sama untuk beberapa di antaranya. Dalam hal ini, paket PUBLIKASIKAN akan berisi beberapa ID langganan yang identik.
ID Langganan dikaitkan dengan langganan apa pun yang dibuat atau dimodifikasi sebagai hasil dari paket BERLANGGANAN. Jika ada ID langganan, itu disimpan dengan langganan. Jika properti ini tidak ditentukan, maka tidak ada langganan yang disimpan dengan langganan.
ID Langganan adalah bagian dari status sesi di server dan dikembalikan ke klien yang menerima paket PUBLIKASIKAN yang sesuai. Mereka dihapus dari status sesi server ketika server menerima paket TIDAK BERLANGGANAN, ketika server menerima paket BERLANGGANAN dari klien untuk filter topik yang sama tetapi dengan ID langganan yang berbeda atau tanpa ID langganan, atau saat server mengirimkan Sesi Hadir 0 dalam paket CONNACK.
Session Expiry Interval - interval kedaluwarsa sesi
Angka yang mewakili interval berakhirnya sesi (dalam detik).
Jika tidak ada interval kedaluwarsa sesi, nilai 0 digunakan. Jika disetel ke 0 atau tidak ada, sesi berakhir ketika koneksi jaringan ditutup.
Jika interval kedaluwarsa sesi adalah 0xFFFFFFFF (UINT_MAX), sesi tidak berakhir.
Klien dan server harus mempertahankan status sesi setelah koneksi jaringan ditutup jika interval kedaluwarsa sesi lebih besar dari 0.
Klien dapat terhubung ke server melalui jaringan yang menyediakan koneksi intermiten. Klien ini dapat menggunakan interval kedaluwarsa sesi singkat sehingga dapat menyambung kembali ketika jaringan tersedia lagi dan terus mengirimkan pesan dengan andal. Jika klien tidak punya waktu untuk memulihkan koneksi, pesan akan hilang.
Mengatur Clean Start ke 1 dan interval kedaluwarsa 0 sama dengan mengatur CleanSession ke 1 dalam spesifikasi MQTT versi 3.1.1. Menyetel Mulai Bersih ke 0 dan tidak ada interval kedaluwarsa sesi yang setara dengan menyetel CleanSession ke 0 dalam spesifikasi MQTT versi 3.1.1.
Pengenal Klien yang Ditugaskan - pengenal klien yang ditetapkan
String yang merupakan ID klien yang ditetapkan server. Digunakan jika pengidentifikasi klien panjang nol digunakan dalam paket CONNECT.
Server Keep Alive - Server Keep Alive
Angka yang menentukan waktu Keep Alive yang ditetapkan oleh server. Jika server mengembalikan Server Keep Alive dalam paket CONNACK, klien HARUS menggunakan nilai itu, bukan nilai yang dikirimnya sebagai Keep Alive. Jika server tidak mengirim Server Keep Alive, server HARUS menggunakan nilai Keep Alive yang ditetapkan oleh klien dalam paket CONNECT.
Kegunaan utama Server Keep Alive untuk server adalah untuk memberi tahu klien bahwa ia akan memutuskan klien jika tidak ada aktivitas sebelum waktu Keep Alive yang ditentukan klien habis.
Metode Otentikasi - metode otentikasi
Sebuah string yang berisi nama metode otentikasi yang digunakan untuk otentikasi tambahan.
Jika tidak ada metode otentikasi, maka otentikasi yang diperpanjang tidak dilakukan.
Metode otentikasi adalah kesepakatan antara klien dan server tentang arti data yang dikirim dalam data otentikasi dan bidang lain di CONNECT, serta pertukaran dan pemrosesan yang diperlukan oleh klien dan server untuk menyelesaikan otentikasi. Metode otentikasi biasanya merupakan mekanisme SASL.
Data Otentikasi - data otentikasi
Data biner berisi data otentikasi. Dikirim hanya jika metode otentikasi ditentukan. Isi data ini ditentukan dengan metode otentikasi.
Minta Informasi Masalah - informasi tentang masalah permintaan
Klien menggunakan nilai ini untuk menunjukkan apakah string alasan atau properti kustom dikirim saat gagal.
- 0 - server dapat mengembalikan string alasan atau properti khusus dalam paket CONNACK atau DISCONNECT, tetapi tidak boleh mengirim string alasan atau properti kustom dalam paket apa pun selain PUBLISH, CONNACK, atau DISCONNECT,
- 1 - Server dapat mengembalikan string alasan atau properti khusus untuk paket apa pun jika diizinkan.
Akan Menunda Interval - Akankah Pesan penundaan interval
Angka yang mewakili interval penundaan Will Message (dalam detik). Jika tidak ada interval penundaan, defaultnya adalah 0 dan tidak ada penundaan sebelum Pesan Akan diterbitkan.
Server menunda pengiriman pesan sampai waktu tunda berakhir atau sesi berakhir, mana saja yang lebih dulu. Jika koneksi jaringan baru ke sesi ini dibuat sebelum interval penundaan berakhir, server tidak akan mengirim Pesan Will.
Salah satu cara untuk menggunakan ini adalah untuk mencegah Pesan Akan diterbitkan jika ada pemutusan sementara dari jaringan dan klien dapat menyambung kembali dan melanjutkan sesi sebelum pesan diterbitkan.
Minta Informasi Tanggapan - minta informasi untuk mendapatkan tanggapan
Sebuah byte dengan nilai 0 atau 1. Klien menggunakan nilai ini untuk meminta server untuk memberikan informasi respon CONNACK.
- 0 - server tidak boleh mengembalikan informasi respons,
- 1 - Server dapat mengembalikan informasi respons dalam paket CONNACK, tetapi ini tidak diperlukan bahkan jika klien meminta informasi ini.
Informasi Tanggapan - informasi untuk tanggapan
String UTF-8 yang digunakan sebagai dasar untuk membuat Topik Respons. Cara klien membuat Topik Tanggapan dari informasi tanggapan tidak ditentukan oleh spesifikasi ini.
Ini biasanya digunakan untuk mengirimkan subset topik yang unik secara global yang dicadangkan untuk klien ini, setidaknya selama masa sesinya. Menggunakan mekanisme ini memungkinkan konfigurasi ini dilakukan satu kali di server daripada di setiap klien.
Referensi Server - link ke server
Sebuah string yang dapat digunakan oleh klien untuk mengidentifikasi server lain yang sedang digunakan. Nilai string ini adalah daftar tautan yang dipisahkan spasi. Format tautan tidak diatur.
Server dapat meminta klien menggunakan server yang berbeda dengan mengirimkan CONNACK atau DISCONNECT dengan kode alasan "Gunakan server lain" atau "Server dipindahkan". Saat mengirim salah satu kode ini, server juga dapat menyertakan properti referensi server untuk menunjukkan lokasi server atau server yang harus digunakan klien.
- Gunakan server lain - Klien harus beralih sementara untuk menggunakan server lain.
- Server dipindahkan - Klien harus selalu terhubung ke server yang berbeda.
Direkomendasikan agar setiap link terdiri dari nama yang diikuti oleh titik dua dan nomor port. Jika nama mengandung titik dua, string nama bisa diapit tanda kurung siku. Nama yang diapit oleh tanda kurung siku tidak boleh berisi karakter kurung siku kanan ("]"). Ini digunakan untuk mewakili alamat IPv6 yang menggunakan titik dua sebagai pemisah.
Nama di tautan server biasanya nama host, nama DNS, nama SRV, atau alamat IP. Nilai setelah titik dua biasanya merupakan nomor port desimal. Ini tidak diperlukan jika informasi port diambil dari nama (misalnya, untuk SRV) atau default.
Jika beberapa tautan diberikan, klien diharapkan untuk memilih salah satunya.
Contoh dari
myserver.xyz.org
myserver.xyz.org:8883
10.10.151.22:8883 [fe80::9610:3eff:fe1c]:1883
myserver.xyz.org:8883
10.10.151.22:8883 [fe80::9610:3eff:fe1c]:1883
String Alasan - string alasan
String yang menjelaskan alasan terkait dengan respons ini. Server menggunakan nilai ini untuk memberikan informasi tambahan kepada klien.
Penggunaan yang benar dari string alasan di klien akan mencakup penggunaan informasi ini dalam pengecualian yang dilemparkan oleh kode klien, atau mencatat string alasan.
Terima Maksimum - nilai maksimum dari jumlah paket QOS> 0
Nomor yang mengatur kuota pengiriman, yang digunakan untuk membatasi jumlah PUBLISH QOS> 0 paket yang dapat dikirim tanpa menerima PUBACK (untuk QoS 1) atau PUBCOMP (untuk QoS 2). Artinya, nilai ini digunakan untuk membatasi jumlah publikasi QoS 1 dan QoS 2 yang dikirim secara bersamaan. Klien / server tidak boleh mengirim pesan dengan QoS 1 dan QoS 2 jika ada pesan Terima Maksimum yang dikirim yang belum mendapat balasan. Ketika Receive Maximum tercapai, pengiriman paket dengan QoS 0 juga dapat dihentikan sementara, tetapi tidak diperlukan. Pada saat yang sama, tidak perlu menunda pengiriman paket selain PUBLISH.
Jika klien dan server telah menyetel Maksimum Terima ke 1, mereka memastikan tidak ada lebih dari satu pesan "dalam penerbangan" pada saat yang sama.
Nilai yang ditentukan hanya berlaku untuk koneksi jaringan saat ini dan diinisialisasi ulang pada koneksi ulang.
Jika tidak ditentukan, defaultnya adalah 65.535.
Topic Alias Maximum - nilai maksimum dari alias topik
Angka yang mewakili nilai maksimum untuk alias topik.
Nilai ini menunjukkan nilai terbesar yang diterima sebagai alias topik. Ini digunakan untuk membatasi jumlah alias topik yang perlu disimpan dalam hubungan ini.
Alias Topik - alias topik
Untuk mengurangi ukuran paket PUBLIKASIKAN, pengirim dapat menggunakan alias topik. Ini adalah nilai integer yang digunakan untuk mengidentifikasi topik daripada menggunakan nama topik. Teknik ini mengurangi ukuran paket PUBLIKASIKAN dan berguna bila nama topik panjang dan nama yang sama sering digunakan kembali pada sambungan jaringan.
Di sisi penerima, saat menerima alias untuk suatu topik, korespondensi yang diperlukan dibuat antara topik dan aliasnya.
Jika paket PUBLIKASIKAN berisi alias topik, penerima memprosesnya sebagai berikut ( lihat bagian 3.3.4 dalam spesifikasi ):
- ,
a) , , ,
b) , , , .
- ,
a) ,
b) , .
Maximum QoS — QoS
Bisa 0 atau 1. Jika tidak ada QoS maksimum, klien menggunakan QoS maksimum 2.
Jika server tidak mendukung paket PUBLISH QoS 1 atau QoS 2, server HARUS mengirim QoS maksimum dalam paket CONNACK yang menunjukkan QoS tertinggi yang didukungnya.
Jika Klien menerima QoS maksimum dari Server, itu seharusnya tidak mengirim paket PUBLISH dengan level QoS melebihi maksimum yang ditentukan.
Mempertahankan Tersedia - tabungan tersedia
- 0 - pesan yang disimpan tidak didukung,
- 1 - pesan yang disimpan didukung.
Klien yang menerima nilai Retain Available 0 dari server TIDAK HARUS mengirim paket PUBLISH dengan flag RETAIN disetel ke 1.
Properti Pengguna - properti pengguna
Ini adalah pasangan string "nama" - "nilai". Properti ini, tidak seperti yang lain, dapat muncul beberapa kali. Nama yang sama dapat digunakan untuk beberapa properti.
Properti ini dapat digunakan untuk memberikan diagnostik tambahan atau informasi lainnya.
Arti dari properti ini tidak ditentukan dalam spesifikasi, arti dan interpretasinya hanya diketahui oleh klien pengirim dan penerima.
Ukuran Paket Maksimum - ukuran paket maksimum
Angka yang menentukan ukuran paket maksimum yang ingin diterima klien / server. Ukuran paket adalah jumlah total byte dalam paket MQTT. Properti ini digunakan untuk menunjukkan bahwa paket yang melebihi batas ini tidak akan diproses.
Jika tidak ada ukuran paket maksimum, tidak ada batasan ukuran paket yang diberlakukan.
Merupakan tanggung jawab aplikasi untuk memilih nilai ukuran paket maksimum yang sesuai jika memilih untuk membatasi ukuran paket.
Tersedia Langganan Wildcard - Tersedia langganan Wildcard
- 0 - langganan wildcard tidak didukung,
- 1 - langganan seperti itu didukung.
Jika propertinya hilang, maka langganan wildcard didukung.
Jika server mendukung langganan karakter pengganti, server masih dapat menolak permintaan langganan tertentu yang berisi langganan karakter pengganti.
Pengenal Langganan Tersedia - pengenal langganan tersedia
- 0 - ID langganan tidak didukung,
- 1 - ID Langganan didukung.
Jika properti tidak ada, maka ID langganan didukung.
Langganan Bersama Tersedia - Langganan bersama tersedia
- 0 - langganan umum tidak didukung,
- 1 - langganan umum didukung.
Jika properti tidak ada, maka langganan umum didukung.
Kesimpulan
Izinkan saya mengingatkan Anda bahwa artikel tersebut lahir saat bekerja menyematkan fungsionalitas yang muncul yang dijelaskan di atas ke dalam layanan platform IoT. Bagi saya juga merasa cukup nyaman untuk menampilkan tampilan properti yang diterima dari klien dalam antarmuka objek ( Anda dapat membaca lebih lanjut tentang objek di sini >>> ). Anda bisa menyembunyikan properti yang tidak menarik, dan Anda bisa menambahkan properti kustom tambahan untuk ditampilkan. Secara umum, tampilannya seperti ini. Mungkin itu saja. Untuk menguji fungsionalitasnya, saya menemukan proyek ini redboltz / mqtt_cpp cukup nyaman dan jelas . Saya akan sangat senang jika di komentar Anda membagikan proyek open-source klien MQTT lainnya (dengan atau tanpa GUI) yang mendukung versi 5.0.