Menurut blog ini , Mosquitto (broker MQTT) sekarang mendukung koneksi ke klien melalui soket web. Artikel blog tampaknya mengisyaratkan bahwa soket web lebih berguna untuk aplikasi peramban, sejak web browser tidak mendukung soket TCP yang tepat (belum), meskipun protokol web socket yang didukung oleh mayoritas browser modern.
Jika saya hanya memiliki berbagai klien dalam jaringan (mis. Sensor dan aktuator berbasis mikrokontroler seperti Raspberry Pis), akankah ada keuntungan menggunakan soket web melalui koneksi TCP langsung? Apakah overhead protokol protokol web hanya layak ketika Anda berkomunikasi dengan browser?
mqtt
mosquitto
web-sockets
Aurora0001
sumber
sumber
Jawaban:
Pertanyaan di sini tampaknya adalah "haruskah saya menggunakan MQTT melalui TCP, atau menggunakan MQTT di soket web (yang juga berlaku untuk TCP)?" Dengan kata lain, apakah "merangkum MQTT dalam protokol websockets adalah ide yang bagus?"
Ini (hampir) sepenuhnya tergantung pada aplikasi Anda dan apakah Anda memerlukan dukungan soket web - mungkin untuk menggunakan pesan di browser atau untuk alasan firewall. Jika Anda tidak dapat membuat server Anda dapat diakses pada port 1883 atau lebih baik 8883 untuk MQTT murni, maka soket web mungkin merupakan pilihan terbaik Anda.
Websockets memang membutuhkan bandwidth ekstra, tetapi apakah itu penting bagi Anda adalah sesuatu yang hanya bisa Anda jawab.
Perlu juga dicatat bahwa dalam versi Mosquitto saat ini, websockets tidak berfungsi sebaik yang mereka bisa sehingga ada latensi tambahan saat mengirim / menerima pesan websockets. Itu adalah sesuatu yang tidak akan menjadi masalah di versi masa depan.
sumber
Ketika Anda berkomunikasi hanya di dalam jaringan Anda ( intranet ), menggunakan TCP murni akan baik-baik saja. Tetapi jika Anda harus terhubung ke server lain, masalah akan muncul.
Karena sebagian besar server modern tidak memungkinkan klien untuk terhubung melalui port acak. Mereka hanya mengizinkan beberapa port khusus untuk terhubung. Itu saja. Karenanya jika Anda harus terhubung ke server lain, lebih baik menggunakan websocket daripada koneksi TCP murni.
Jika Anda mempertimbangkan overhead, itu tidak jauh lebih besar. Anda dapat merujuk artikel ini , jika Anda ingin tahu lebih banyak tentang overhead websocket.
Menurut pendapat pribadi saya, lebih baik menggunakan websocket selalu, kecuali Anda memiliki beberapa masalah serius.
sumber
tl; dr - selalu lebih suka perpustakaan gratis untuk mengkodekannya sendiri (kecuali jika Anda memiliki persyaratan ekstrim)
Berapa lama seutas tali? (YMMV)
Saya hanya bisa berbicara secara umum, tapi saya selalu lebih suka perpustakaan pembungkus untuk soket mentah (atau, memang, untuk pengkodean apa pun yang bisa saya dapatkan secara gratis dari perpustakaan).
Mereka membuat pengkodean lebih sederhana dan lebih sedikit kesalahan. Mereka menangani banyak pemeliharaan rumah dan penanganan kesalahan, yang merupakan kode yang harus Anda tulis dan debug sendiri, di mana sebagai perpustakaan secara umum telah ditinjau dan diuji dengan baik dan sedang digunakan oleh ribuan orang lain, yang semuanya akan melaporkan / memperbaiki bug untuk Anda.
Selain itu, kode ini lebih sedikit untuk Anda pertahankan (dan, mungkin, port), yang berarti lebih banyak waktu untuk mengembangkan, menguji & memoles aplikasi Anda, atau beralih ke yang berikutnya.
Satu-satunya overhead adalah panggilan fungsi, jika Anda menerima bahwa semua kebaikan pustakawan (penanganan kesalahan, pemeliharaan selang & sejenisnya) adalah sesuatu yang harus Anda kode sendiri untuk mendapatkan perangkat lunak yang baik dan stabil.
Jika Anda khawatir tentang kinerja, cukup profil. Tapi, kecuali soket Anda aktif ratusan kali per detik, saya bahkan tidak mau repot.
sumber