Apa perbedaan antara MQTT dan Soket Web, dan kapan saya harus menggunakannya?

17

Apa perbedaan utama antara MQTT dan Soket Web?

Saat menggunakan IoT untuk otomatisasi rumah - kontrol dan pantau akses melalui berbagai perangkat, yang mana salah satunya harus digunakan saat Rest API berbasis dan aksesibilitas berbasis browser diperlukan.

Saya menggunakan Java (Pi4J Library) pada Raspberry Pi 2 B +.

Saya memiliki pengaturan beberapa sensor seperti terang dan gelap, kelembaban, PID dll.

Saya juga memiliki server cloud tempat saya dapat mengirim data jika diperlukan.

Shakti Phartiyal
sumber
1
Anda memutuskan mana yang akan digunakan dengan mendefinisikan dengan jelas semua kebutuhan Anda saat ini dan kemungkinan masa depan. Anda kemudian menghasilkan cross-matrix yang menunjukkan teknologi mana yang paling memenuhi persyaratan Anda. Anda kemudian memilih untuk menggunakan satu atau lebih teknologi untuk memenuhi persyaratan Anda.

Jawaban:

23

Pengaturan pertanyaan di sini sedikit menyesatkan, karena sebenarnya protokol-protokol ini sama sekali tidak dapat dibandingkan. Mereka seperti TCP dan IP, lapisan di atas satu sama lain. [1]

Websockets adalah protokol tingkat rendah untuk menyediakan hal-hal yang tidak disediakan oleh 'pesaing' RESTful http-nya yang berada di level yang sama: saluran yang selalu terbuka tanpa perlu membuka dan menutup pada setiap permintaan. [2]

MQTT menyediakan cara yang ringan untuk menerbitkan atau berlangganan data. Kekeliruannya mungkin karena langganan itu adalah semacam saluran, tetapi itu adalah jenis saluran yang berbeda. Untuk membuat koneksi terbuka konstan di MQTT Anda memerlukan Websockets AND MQTT pada saat yang bersamaan.

Di IoT, juga dalam desain apa pun, Anda harus memilih apakah Anda perlu streaming atau tidak (WebSockets vs RESTful) dan tentang MQTT, Anda mungkin harus berpikir apakah Anda ingin berlangganan dan menerbitkan mekanisme pada aplikasi Anda.

Pada beberapa keadaan Anda dapat mempertimbangkan MQTT melalui WebSockets, jika ada hal umum yang ada. [3]

Jawab pertanyaan:

Anda mengatakan Anda memiliki pengaturan Rasperry Pi dan beberapa sensor di sekitar tempat itu. Jika sensor jauh dari Rasperry dengan pengontrolnya sendiri, Anda dapat menggunakan MQTT untuk mengumpulkan data. Untuk menyimpan data ke cloud, kirim data dalam HTTP. Di cloud menyediakan data melalui istirahat. [4]

Untuk websockets tidak perlu, tetapi jika Anda merasa berguna, gunakan saja.

Sumber:

[1] https://www.quora.com/What-are-the-pros-and-cons-of-WebSockets-versus-MQTT-as-real-time-web-infrastructure-for-the-Internet-of -Sesuatu

[2] https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-understanding-the-difference/

[3] /programming/30624897/direct-mqtt-vs-mqtt-over-websocket

[4] http://www.theinternetofthings.eu/antonio-grasso-mqtt-vs-http-what-best-protocol-iot

mico
sumber
3
Juga relevan dengan poin terakhir Anda: Jawaban ini oleh Roger Light, pengembang broker Mosquitto MQTT membandingkan kasus penggunaan soket mentah dengan soket web dengan MQTT.
Aurora0001
Terima kasih, mico, itu penjelasan yang luar biasa. tapi saya masih tidak jelas apa yang harus digunakan .. apa yang akan Anda rekomendasikan untuk skenario saya?
Shakti Phartiyal
3
Jawabannya bagus, tetapi: Menggunakan "buka dan tutup" WRT WS: // vs. HTTP: // mungkin menyesatkan; pertama, permintaan HTTP 1.1 dapat disalurkan, sehingga pada soket tingkat satu koneksi literal dapat menyertakan jumlah permintaan tanpa batas tanpa membuka dan menutup dalam arti itu. Akan lebih baik untuk mengatakan keuntungan dari websockets adalah bahwa tidak ada komitmen untuk siklus "permintaan dan tanggapan" yang sinkron ; Anda memiliki saluran terbuka, dua arah dengan sekumpulan aturan minimum untuk pertukaran.
goldilocks
"Untuk membuat koneksi terbuka konstan di MQTT Anda memerlukan Websockets AND MQTT pada saat yang sama." Apakah Anda yakin tentang ini? Tolong jelaskan mengapa MQTT harus menggunakan webSockets untuk menjaga "koneksi terbuka konstan" jika klien dapat terus menerbitkan paket PINGRESP kembali ke server? Seorang klien yang mengimplementasikan MQTT akan mengirim paket PINGRESP untuk menjaga koneksi tetap hidup, dan klien yang menghakimi webSockets akan menggunakan keepAlive () untuk mengirim paket kosong webSocket.send ('') ke server untuk menjaga koneksi tetap hidup.
John
Hmm .. Anda bisa menjaga koneksi tetap hidup dengan paket itu . Saya menemukan di sana MQTT berfungsi melalui TCP / IP (bukan HTTP). Dalam hal ini Anda dapat membiarkan koneksi terbuka.
mico
9

Mereka sebanding karena keduanya memungkinkan Anda untuk memiliki komunikasi dupleks-penuh sehingga server dapat segera mengirimkan data ke klien, tanpa polling klien untuk itu (seperti mungkin dengan HTTP).

Namun, Websockets dirancang untuk koneksi point-to-point sederhana antara klien dan server. MQTT melapisi abstraksi tambahan di atas pengiriman pesan dasar, sehingga banyak pihak yang berkepentingan dapat berlangganan pesan yang mungkin menarik bagi mereka. Pesan karena itu dapat dialihkan oleh 'topik pesan' sehingga banyak klien dapat berbagi antrian nosional, di mana server dapat memilih untuk mendengar semua pesan dari semua klien, tetapi juga dapat memfilter menurut topik.

MQTT memiliki berbagai fitur bermanfaat lainnya, mis. Pesan yang disimpan, sehingga pelanggan segera menerima pesan, dan LWT (Last Will and Testament) yang merupakan pesan yang dapat dikirim secara otomatis jika klien secara abnormal terputus. Singkatnya, MQTT adalah fitur penawaran yang lebih tinggi dan abstraksi yang tidak dimiliki Websocket sederhana.

TheMagicCow
sumber