Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 8488|Odpowiedź: 0

Kilka punktów wiedzy EMQTT

[Skopiuj link]
Opublikowano 15.02.2019 10:25:09 | | |
Zanim zacznę pisać tekst, muszę podziękować internatowi "Xiaolong" oraz internaucom z grupy emqtt.io za pomoc, właśnie zacząłem korzystać z MQTT. Jest wiele rzeczy, których nie rozumiem, gdy pytałem o rozwiązanie w grupie emqtt.io, "Xiaolong" szczegółowo wyjaśnił kilka punktów wiedzy o MQTT i podał rozwiązania, bardzo dziękuję. Myślę, że niektóre z wymienionych w nim rzeczy są nadal bardzo przydatne dla początkujących, więc oto podsumowanie mojej historii czatów z "Xiaolong" dla twojej informacji.

Pytanie 1: Jeśli MCU ma ograniczoną pamięć podręczną i ograniczoną moc obliczeniową, nie da się wysyłać wiadomości jednocześnie, jak w tym przypadku publikować je przez MQTT?
Najpierw złóż nagłówek protokołu publikującego, zapisz w nim długość ładunku, wyślij go przez TCP, a następnie stopniowo wysyłaj ten ładunek. Jeśli nie możesz uzyskać całkowitej długości ładunku, jest to trudne. Ponieważ wysyłasz raport o publikacji protokołu, po odczytaniu przez serwer długości ładunku w głowie, będzie kontynuował odczyt, aż osiągnie wymaganą długość, a następnie publikacja jest liczona. Dlatego najpierw musisz potwierdzić długość publikowanej treści, potem pogrupować nagłówek pakietu publikuj, wpisać długość ładunku, tcp:send(head), a następnie wysyłać payload pojedynczo, np. po 1k, albo przesłać dane zgodnie z normalnym tcp i wysłać je do końca, nawet jeśli publikacja się skończy. Następny send należy do warstwy TCP i nie musisz interweniować. Jeśli na warstwie TCP wysłanie się nie powiedzie, musi wystąpić problem z gniazdem, połączenie zostanie przerwane, trzeba ponownie połączyć się z serwerem MQTT, jeśli nie zostanie zakończone, to sesja serwerowa również się zakończy, czyli serwer nie otrzymał danych. Ponownie połączyć, musisz wysłać wiadomość ponownie, jeśli jest rozłączona, musisz się ponownie połączyć, czy chcesz wysłać dane ponownie, zależy od tego, czy zachowałeś poprzednie dane. Jeśli wiadomość jest ważna, możesz użyć qos=1 lub 2, aby upewnić się, że serwer ją odbierze, qos=1 wymaga jednej podróży w obie strony, qos=2 czterech przejazdów w obie strony, qos=0 jest bardzo proste, dopóki wysyłasz wiadomość, nie ma znaczenia.

Pytanie 2: Czy istnieje wiele open source zasobów dotyczących MQTT?

Logowanie do linku jest widoczne.Jest ich dużo

Pytanie 3: Dlaczego MQTT zazwyczaj nie zapewnia funkcji persystencji?

Protokół MQTT jest projektowany zgodnie z internetowym projektem urządzenia, a dane są przechowywane w pamięci

Pytanie 4: Czy MQTT pochłania pamięć?

MQTT zużywa więcej pamięci, a zmierzone dane emqtt to: 38W, pamięć odpowiada za 14G, CPU 15%

Pytanie 5: Jaka jest relacja między sesją a klientem?

Na przykład, jeśli masz płytę, jako klient inicjuje żądanie połączenia MQTT w celu połączenia z serwerem MQTT, jest to usługa EMQTT, po otrzymaniu przez serwer EMQTT żądania połączenia z tą płytą, nawiąże połączenie TCP z płytą na warstwie TCP, a w EMQTT zostanie wygenerowany proces komunikacji z tą płytą, a także wygenerowany jest proces zwany sesją. Ta sessoin to temat specjalizujący się w zarządzaniu subskrypcją tej tablicy, a inne zarządy również przesyłają je do sesji odpowiadającej tej tablicy, jeśli opublikują temat interesujący tę deskę, jeśli sesja otrzyma subskrybowany temat i okaże się, że klient nadal żyje, prześle dane przez tego klienta przez TCP do tej tablicy, jeśli okaże się, że klient już nie istnieje, czyli płyta i serwer są uszkodzone. Następnie sesja zapisze odebrany temat subskrypcji w sesji, a następnym razem, gdy tablica zostanie połączona, i cleansession=false, sesja nie zostanie wyczyszczona, a przy tym połączeniu wcześniej otrzymana wiadomość subskrypcyjna zostanie wysłana do tablicy, co prawdopodobnie oznacza.

Pytanie 6: Skąd emqtt wie, że podłączony klient jest ten sam?

Podczas łączenia musisz ustawić identyfikator klienta, ten identyfikator może pozostać nieustawiony, jeśli go nie ustawisz, unikalny identyfikator zostanie automatycznie wygenerowany po stronie serwera emqtt, jeśli chcesz użyć sesji, musisz mieć unikalny identyfikator, możesz użyć IMEI. Jeśli musisz otrzymywać wiadomości offline, musisz użyć określonego identyfikatora.

Pytanie 7: Czy czas sesji emqtt może być modyfikowany?

Możesz zmienić czas sesji, teraz to 48 godzin, możesz zmienić na tydzień, jeśli chcesz, żeby to było na stałe, obawiam się, że to nie jest odpowiednie.

Pytanie 8: Czy uprawnienia dostępu do emqtt są zapisane w pliku konfiguracyjnym?

etc/acl.config

Pytanie 9: Jaki jest rozkład emqtt?

Rozproszone oznacza po prostu połączenie kilku serwerów, każdego lub więcej, o ile nie są zepsute, emqtt może działać normalnie. Dane EMQTT są współdzielone przez kilka węzłów, a jeśli wystąpi problem z węzłem, dane nie zostaną utracone, ale dane sesji na węźle zostaną utracone.









Poprzedni:Pierwsze zetknięcie z kolejką wiadomości EMQX (EMQTTD)
Następny:jNotatki do badania zapytania
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com