Модель, которую используют подключенные к IoT Hub устройства, заключается в том, что они никогда не будут принимать входящие подключения. Устройства-концентраторы IoT никогда не выступают в роли «сервера», и это является важной частью модели безопасности в IoT Azure. Окончательная модель на этом заключена в Клеменс Вастерс «Служба помощи связи» .
Поэтому устройства всегда «опрашивают» внешнюю службу для отправки данных или получения команд. API-интерфейсы создают впечатление, что данные отправляются на устройство, но это всегда устройство, устанавливающее исходящее соединение.
Центр IoT делает это двумя способами:
- Отправляя данные в конечную точку устройства
/devices/{deviceId}/messages/devicebound
. Это конечная точка обмена сообщениями AMQP, похожая на очередь или подписку на тему. При чтении команд устройство должно подтвердить получение, если это необходимо, что является частью базового протокола AMQP. Это работает так же с MQTT, и https является допустимым запасным вариантом. API оборачивает все это для вас. Существуют дополнительные концепции, такие как «прямые методы», которые представляют собой обертку API по сути того же базового протокола сообщений.
- С помощью серверного устройства-близнеца, который является способом логической синхронизации свойств между устройством и сервером. Вы устанавливаете свойство для двойника устройства, и когда устройство синхронизируется, это свойство будет синхронизироваться с устройством. Это меньше основано на сообщениях и основано на протоколе управления устройством LWM2M.
Большая часть «опроса», соединения, совместного использования соединений, квитанций и т. Д. Должна рассматриваться как часть протокола AMQP (или MQTT), который, в свою очередь, включен в IoT Hub SDK. Таким образом, вышесказанное очень упрощено, но, повторюсь, IoT Hub не может и никогда не будет пытаться отправлять данные на ip-адрес / порт вашего устройства.