Według tego bloga Mosquitto (broker MQTT) obsługuje teraz łączenie się z klientami przez gniazda sieciowe. Artykuł na blogu wydaje się sugerować, że gniazda sieciowe są bardziej przydatne dla aplikacji przeglądarkowych, ponieważ przeglądarki internetowe nie obsługują jeszcze odpowiednich gniazd TCP (chociaż), chociaż protokół gniazd sieciowych jest obsługiwany przez większość współczesnych przeglądarek.
Jeśli mam po prostu różnych klientów w sieci (np. Czujniki i urządzenia wykonawcze oparte na mikrokontrolerach, takich jak Raspberry Pis), czy korzystanie z gniazd sieciowych w porównaniu z bezpośrednimi połączeniami TCP przyniesie jakieś korzyści? Czy narzut związany z protokołem gniazd sieciowych jest tego wart tylko podczas komunikacji z przeglądarką?
źródło
Odpowiedzi:
Wydaje się, że pytanie brzmi „czy powinienem używać MQTT przez TCP, czy używać MQTT przez websockets (które również przechodzą przez TCP)?” Innymi słowy, czy „enkapsulacja MQTT w protokole websockets jest dobrym pomysłem?”
Jest to (prawie) całkowicie zależne od twojej aplikacji i tego, czy potrzebujesz obsługi gniazd sieciowych - prawdopodobnie do konsumpcji wiadomości w przeglądarce lub ze względów zapory ogniowej. Jeśli nie możesz mieć dostępu do twojego serwera na porcie 1883 lub lepszym 8883 dla czystego MQTT, wtedy websockets mogą być najlepszą opcją.
Websockets wymaga dodatkowej przepustowości, ale to, co jest dla Ciebie ważne, jest czymś, na co tylko możesz odpowiedzieć.
Warto również zauważyć, że w obecnych wersjach Mosquitto websockets nie działają tak dobrze, jak mogłyby, więc może wystąpić dodatkowe opóźnienie podczas wysyłania / odbierania wiadomości websockets. Nie będzie to jednak problemem w przyszłych wersjach.
źródło
Podczas komunikowania się tylko wewnątrz swojej sieci ( intranet ), przy użyciu czystego TCP będzie dobrze. Ale jeśli będziesz musiał połączyć się z innym serwerem, pojawią się problemy.
Ponieważ większość współczesnych serwerów nie pozwala klientom łączyć się przez losowe porty. Umożliwiają połączenie tylko niektórych dedykowanych portów. To wszystko. Dlatego jeśli musisz połączyć się z innym serwerem, lepiej użyć websocket niż czystego połączenia TCP.
Jeśli bierzesz pod uwagę koszty ogólne, nie jest to aż tak dużo większe. Możesz odnieść się do tego artykułu , jeśli chcesz dowiedzieć się więcej na temat narzutów websocket.
Moim osobistym zdaniem lepiej jest zawsze korzystać z websocket, chyba że masz poważne obawy.
źródło
tl; dr - zawsze wolę darmowe biblioteki od kodowania go samodzielnie (chyba że masz ekstremalne wymagania)
Jak długi jest kawałek sznurka? (YMMV)
Mogę mówić tylko ogólnie, ale zawsze wolę biblioteki opakowań od surowych gniazd (a nawet kodowania wszystkiego, co mogę dostać za darmo z biblioteki).
Ułatwiają kodowanie i są mniej podatne na błędy. Zajmują się wieloma czynnościami związanymi z utrzymywaniem domu i obsługą błędów, czyli kodem, który sam musiałbyś napisać i debugować, podczas gdy biblioteka jest ogólnie dobrze sprawdzona i przetestowana i jest używana przez tysiące innych osób, z których wszystkie są używane zgłosi / naprawi za ciebie błędy.
Co więcej, jest mniej kodu do utrzymania (i ewentualnie portu), co oznacza więcej czasu na opracowanie, przetestowanie i dopracowanie aplikacji lub przejście do następnej.
Jedynym narzutem jest prawdopodobnie wywołanie funkcji, jeśli zaakceptujesz, że cała ta dobroć bibliotekarza (obsługa błędów, utrzymywanie węża i tym podobne) jest czymś, co musiałbyś sam kodować, aby uzyskać dobre, stabilne oprogramowanie.
Jeśli obawiasz się o wydajność, po prostu profil. Ale jeśli twoje gniazdo nie jest aktywne setki razy na sekundę, nawet nie zawracałbym sobie głowy.
źródło