У меня есть плата Arduino, подключенная к сети Wi-Fi, которая имеет доступ в Интернет. Я хочу связаться с этой платой Arduino из любой другой сети без помощи переадресации портов в домашней сети Arduino. В настоящее время я делаю пинг Arduino на моем веб-сервере каждые две секунды, что, на мой взгляд, непрактично.
Как устройство, такое как умные светодиоды Wi-Fi, подключается к Интернету? Мы можем управлять ими с помощью нашего мобильного телефона без переадресации портов или каких-либо других настроек конфигурации маршрутизатора, верно? Как они это делают?
Ответы:
Чтобы избежать необходимости находиться в сети, которая допускает входящий трафик, вам необходимо подключиться к серверу, который будет ретранслировать запросы от клиентов, которые также подключаются к нему.
По сути, это похоже на модель спутника связи. И компьютер пользователя, или телефон, или что-то еще, а также устройство IoT поддерживают связь «вверх» с этим сервером в облаке, и оно принимает каждое сообщение, которое появляется на одной стороне, и отправляет его на другой, и наоборот.
Существует много возможных способов реализации такого сервера. В настоящее время модно сделать его брокером MQTT . В MQTT клиенты (как устройства IoT, так и пользовательские устройства) устанавливают исходящие соединения с посредником, а сообщения о нарушенных общих ресурсах, которые «публикуются» по «теме» одним клиентом для всех клиентов, которые «подписались» на эту «тему» тема
Поскольку соединение уже установлено, брокер может отправлять незапрошенный трафик по нему без задержки интервала опроса
Чтобы поддерживать установленные соединения, иногда отправляется поддерживающий трафик
Если соединение разрывается, существуют правила для его восстановления
По сути, заметная задержка возникает только в том случае, если посредник пытается передать сообщение вниз, и соединение оказывается разорванным и еще не восстановленным, и в этом случае сообщение будет отложено до повторного подключения. (Существуют варианты хранения сообщений, их удаления и т. Д.).
источник