Sebelum memulai teks, saya perlu berterima kasih kepada netizen "Xiaolong" dan netizen di grup emqtt.io atas bantuan mereka, saya baru saja mulai menggunakan MQTT Ada banyak hal yang tidak saya mengerti, ketika saya bertanya tentang solusi di grup emqtt.io, "Xiaolong" memberi saya penjelasan terperinci tentang beberapa poin pengetahuan MQTT dan memberikan solusi, terima kasih banyak. Saya pikir beberapa hal yang disebutkan di dalamnya masih sangat berguna bagi pemula, jadi berikut adalah ringkasan riwayat obrolan saya dengan "Xiaolong" untuk referensi Anda.
Pertanyaan 1: Jika MCU memiliki cache terbatas dan daya pemrosesan terbatas, tidak mungkin mengirim pesan sekaligus, bagaimana cara menerbitkan pesan melalui MQTT dalam hal ini? Pertama, kumpulkan header protokol publikasi, tulis panjang muatan di dalamnya, kirimkan melalui TCP, lalu kirim muatan sedikit demi sedikit. Jika Anda tidak bisa mendapatkan total panjang muatan, ini sulit. Karena Anda mengirim laporan protokol publikasi, setelah server membaca panjang muatan di kepala, server akan terus membaca hingga mencapai panjang yang diperlukan, dan kemudian publikasi dihitung. Oleh karena itu, kebutuhan Anda adalah terlebih dahulu mengonfirmasi panjang konten yang Anda terbitkan, lalu mengelompokkan header paket publikasi, mengisi panjang payload, tcp:send(head), lalu mengirim muatan satu per satu, seperti 1k sekaligus, atau mengirim data sesuai dengan tcp normal, dan mengirimkannya sepenuhnya, bahkan jika publikasi selesai. Pengiriman berikutnya milik lapisan TCP, dan Anda tidak perlu campur tangan. Jika di lapisan TCP, pengiriman gagal, pasti ada masalah dengan soket, koneksi terputus, Anda harus menyambung kembali ke server MQTT, jika belum selesai, maka sesi server juga akan berakhir, yaitu server belum menerima data. Sambungkan kembali, Anda harus mengirim ulang pesan, selama terputus, Anda harus terhubung kembali, apakah Anda ingin mengirim ulang data, tergantung pada apakah Anda telah menyimpan data sebelumnya. Selain itu, jika pesan itu penting, Anda dapat menggunakan qos=1 atau 2 untuk memastikan bahwa server menerima pesan, qos=1 membutuhkan satu pulang pergi, qos=2 membutuhkan empat pulang pergi, qos=0 sangat sederhana, selama Anda mengirimkannya, itu tidak masalah.
Pertanyaan 2: Apakah ada banyak sumber daya open source untuk MQTT?
Login hyperlink terlihat.Ada banyak dari mereka
Pertanyaan 3: Mengapa MQTT umumnya tidak menyediakan fungsi persistensi?
Protokol MQTT dirancang sesuai dengan desain online perangkat, dan data disimpan dalam memori
Pertanyaan 4: Apakah konsumsi memori MQTT?
MQTT lebih banyak menghabiskan memori, dan data yang diukur dari emqtt adalah: 38W, memori menyumbang 14G, CPU 15%
Pertanyaan 5: Apa hubungan antara sesi dan klien?
Misalnya, jika Anda memiliki papan, sebagai klien, memulai permintaan koneksi MQTT untuk terhubung ke server MQTT, misalnya, ini adalah layanan EMQTT, setelah server EMQTT menerima permintaan koneksi papan ini, server EMQTT akan membuat koneksi TCP dengan papan pada lapisan TCP, dan dalam EMQTT, proses akan dihasilkan untuk berkomunikasi dengan papan ini, dan proses juga akan dihasilkan, yang disebut sesi. Sessoin ini adalah tema yang mengkhususkan diri dalam mengelola langganan papan ini, dan papan lain juga akan mengirimkannya ke sesi yang sesuai dengan papan ini jika mereka menerbitkan topik yang diminati ke papan ini, jika sesi ini menerima topik yang dilanggani, dan menemukan bahwa klien masih hidup, itu akan mengirim data melalui klien ini melalui TCP ke papan ini, jika ditemukan bahwa klien tidak ada lagi, yaitu papan dan server rusak. Kemudian sesi akan menyimpan topik langganan yang diterima di sesi terlebih dahulu, dan lain kali papan terhubung, dan cleansession=false, maka sesi tidak akan dihapus, dan saat menghubungkan kali ini, pesan langganan yang diterima sebelumnya akan dikirim ke papan, yang mungkin artinya.
Pertanyaan 6: Bagaimana emqtt tahu bahwa klien yang terhubung adalah sama?
Saat menghubungkan, Anda perlu mengatur ID klien, ID ini dapat dibiarkan tidak disetel, jika tidak ditetapkan, ID unik akan dibuat secara otomatis di sisi server emqtt, jika Anda ingin menggunakan sesi, Anda harus memiliki ID unik, Anda dapat menggunakan IMEI. Jika Anda harus menerima pesan offline, Anda harus menggunakan ID tertentu.
Pertanyaan 7: Bisakah waktu sesi emqtt dimodifikasi?
Anda dapat mengubah waktu sesi, sekarang 48 jam, Anda dapat mengubahnya menjadi seminggu, jika Anda ingin permanen, saya khawatir emqtt tidak cocok.
Pertanyaan 8: Apakah izin akses emqtt tertulis dalam file konfigurasi?
dll/acl.config
Pertanyaan 9: Apa distribusi emqtt?
Didistribusikan berarti menghubungkan beberapa server Anda bersama-sama, salah satu atau lebih dari mereka, selama tidak semuanya rusak, emqtt dapat berjalan secara normal. Data EMQTT dibagikan oleh beberapa node, dan jika ada masalah dengan node, data tidak akan hilang, tetapi data sesi pada node akan hilang.
|