Перед початком тексту хочу подякувати користувачу мережі «Xiaolong» та користувачам emqtt.io групи за допомогу, я тільки почав користуватися MQTT. Є багато речей, які я не розумію, коли я запитував про рішення в emqtt.io групі, «Xiaolong» детально пояснив деякі знання MQTT і запропонував рішення, дуже дякую. Я вважаю, що деякі речі, згадані тут, досі дуже корисні для початківців, тому ось короткий огляд моєї історії чату з «Xiaolong» для вашого довідки.
Питання 1: Якщо MCU має обмежений кеш і обчислювальну потужність, неможливо надіслати повідомлення одночасно, як у такому випадку публікувати повідомлення через MQTT? Спочатку зберіть заголовок протоколу публікації, запишіть у ньому довжину корисного навантаження, надішліть його через TCP, а потім поступово надсилайте корисне навантаження. Якщо не вдається отримати загальну довжину корисного навантаження, це складно. Оскільки ви надсилаєте звіт про протокол публікації, після того як сервер зчитує довжину корисного навантаження в голові, він продовжує читати, доки не досягне потрібної довжини, після чого публікація підраховується. Тому вам потрібно спочатку підтвердити довжину контенту, який ви публікуєте, потім згрупувати заголовок пакету публікації, заповнити довжину корисного навантаження, tcp:send (голову), а потім надіслати корисне навантаження по одному, наприклад, по 1k за раз, або надіслати дані за стандартним tcp і надіслати їх до кінця, навіть якщо публікація завершена. Наступне відправлення належить TCP-шару, і втручатися не потрібно. Якщо на рівні TCP відправлення не спрацює, має бути проблема з сокетом, з'єднання розірване, потрібно знову підключатися до MQTT-сервера, якщо він не завершений, то серверна сесія також завершиться, тобто сервер не отримав дані. Підключитися, потрібно надіслати повідомлення знову, якщо воно від'єднане, потрібно знову підключитися, чи хочете ви перенадсилати дані — залежить від того, чи зберегли ви попередні дані. Також, якщо повідомлення важливе, ви можете використати qos=1 або 2, щоб гарантувати, що сервер отримає повідомлення, qos=1 вимагає одного рейсу туди й назад, qos=2 — чотири поїздки туди й назад, qos=0 дуже простий, якщо ви його надсилаєте, це не має значення.
Питання 2: Чи існує багато відкритих ресурсів для MQTT?
Вхід за гіперпосиланням видно.Їх дуже багато
Питання 3: Чому MQTT зазвичай не забезпечує функції персистенції?
Протокол MQTT розроблений відповідно до онлайн-дизайну пристрою, а дані зберігаються в пам'яті
Питання 4: Чи споживає MQTT пам'ять?
MQTT споживає більше пам'яті, а вимірювані дані emqtt становлять 38 Вт, пам'ять — 14G, процесор — 15%
Питання 5: Який зв'язок між сесією та клієнтом?
Наприклад, якщо плата, як клієнт, ініціює запит на MQTT-з'єднання для підключення до MQTT-сервера, наприклад, це EMQTT-сервіс, після того як EMQTT-сервер отримує запит на підключення цієї плати, він встановлює TCP-з'єднання з платою на рівні TCP, і всередині EMQTT генерується процес для зв'язку з цією платою, а також генерується процес, який називається сесією. Ця сесія спеціалізується на управлінні підпискою цієї дошки, і інші ради також надсилають її на відповідну сесію, якщо публікують тему, що цікавить цю дошку, якщо ця сесія отримує підписану тему і виявляє, що клієнт ще живий, дані через цього клієнта через TCP на цю дошку, якщо виявиться, що клієнта більше немає, тобто плата і сервер зламані. Потім сесія спочатку зберігає отриману тему підписки в сесії, а наступного разу, коли дошка буде підключена, і cleansession=false, сесія не буде очищена, і при підключенні цього разу на дошку буде надіслано раніше отримане повідомлення про підписку, що, ймовірно, і означає.
Питання 6: Як emqtt знає, що підключений клієнт той самий?
Під час підключення потрібно встановити client ID, цей ID можна залишити невстановленим, якщо не встановленим, унікальний ID автоматично згенерується на стороні emqtt сервера, якщо ви хочете використовувати сесію, у вас має бути унікальний ID, ви можете використовувати IMEI. Якщо вам потрібно отримувати офлайн-повідомлення, потрібно використовувати чіткий ідентифікатор.
Питання 7: Чи можна змінити час сесії emqtt?
Ви можете змінити час сесії, зараз це 48 годин, можна змінити на тиждень, якщо хочете, щоб це було постійно, боюся, emqtt не підходить.
Питання 8: Чи записується дозвіл доступу emqtt у файлі конфігурації?
etc/acl.config
Питання 9: Який розподіл emqtt?
Розподілене означає з'єднання кількох ваших серверів разом, будь-якого з них, якщо вони не всі зламані, emqtt може працювати нормально. Дані EMQTT спільно передаються кількома вузлами, і якщо виникає проблема з вузлом, дані не будуть втрачені, а сесійні дані на вузлі.
|