Согласно этому блогу , Mosquitto (брокер MQTT) теперь поддерживает подключение к клиентам через веб-сокеты. В блоге статья , кажется, намекают , что веб - сокеты являются более полезными для браузерных приложений, так как веб - браузеры не поддерживают соответствующие сокеты TCP (пока), хотя протокол веб - сокет будет поддержан большинством современных браузеров.
Если у меня просто есть несколько клиентов в сети (например, датчики и исполнительные механизмы на основе микроконтроллеров, таких как Raspberry Pis), будет ли какое-то преимущество в использовании веб-сокетов по сравнению с прямыми соединениями TCP? Стоит ли издержки протокола веб-сокета только тогда, когда вы общаетесь с браузером?
mqtt
mosquitto
web-sockets
Аврора0001
источник
источник
Ответы:
Здесь возникает вопрос: «Должен ли я использовать MQTT через TCP или использовать MQTT через веб-сокеты (что также идет через TCP)?» Другими словами, является ли "инкапсуляция MQTT в протоколе websockets хорошей идеей?"
Это (почти) полностью зависит от вашего приложения и от того, нужна ли вам поддержка веб-сокетов - возможно, для потребления сообщений в браузере или по причинам брандмауэра. Если ваш сервер не может быть доступен через порт 1883 или лучше 8883 для чистого MQTT, то веб-сокеты могут быть вашим лучшим вариантом.
Websockets требует дополнительной пропускной способности, но о том, важно ли это для вас, может ответить только вы.
Стоит также отметить, что в текущих версиях Mosquitto веб-сокеты работают не так хорошо, как могли бы, поэтому могут быть дополнительные задержки при отправке / получении сообщений веб-сокетов. Это то, что не будет проблемой в будущих версиях, хотя.
источник
Когда вы общаетесь только внутри вашей сети ( интрасети ), использование чистого TCP будет в порядке. Но если вам нужно подключиться к другому серверу, возникнут проблемы.
Потому что большинство современных серверов не позволяют клиентам подключаться через случайные порты. Они позволяют подключать только некоторые выделенные порты. Это все. Следовательно, если вам нужно подключиться к другому серверу, лучше использовать веб-сокет, а не просто TCP-соединение.
Если вы рассматриваете накладные расходы, это не намного больше. Вы можете обратиться к этой статье , если хотите узнать больше о накладных расходах websocket.
По моему личному мнению, лучше использовать websocket всегда, кроме случаев, когда у вас есть серьезные проблемы.
источник
tl; dr - всегда предпочитайте бесплатные библиотеки кодированию самостоятельно (если у вас нет особых требований)
Как долго это кусок строки? (YMMV)
Я могу говорить только в целом, но я всегда предпочитаю библиотеки-оболочки для необработанных сокетов (или, на самом деле, для кодирования всего, что я могу получить бесплатно из библиотеки).
Они делают кодирование проще и менее подвержены ошибкам. Они позаботятся о ведении домашнего хозяйства и обработке ошибок, то есть коде, который вам придется писать и отлаживать самостоятельно, поскольку библиотека, как правило, хорошо проверена и протестирована и используется тысячами других, каждый из которых сообщит / исправит ошибки для вас.
Кроме того, для вас требуется меньше кода (и, возможно, порта) для поддержки, что означает больше времени для разработки, тестирования и совершенствования приложения или перехода к следующему.
Единственные издержки - это, возможно, вызов функции, если вы согласны с тем, что все эти блага библиотекаря (обработка ошибок, хранение шлангов и т. П.) - это то, что вам придется кодировать самостоятельно, чтобы получить хорошее, стабильное программное обеспечение.
Если вы беспокоитесь о производительности, просто профиль. Но, если бы ваш сокет не работал сотни раз в секунду, я бы даже не стал беспокоиться.
источник