El modelo que utilizan los dispositivos conectados a IoT Hub es que nunca aceptarán conexiones entrantes. Los dispositivos IoT Hub nunca actúan como un 'servidor', y esta es una parte crucial del modelo de seguridad en Azure IoT. El modelo definitivo sobre esto está encapsulado en la "Comunicación asistida por servicio" de Clemens Vasters .
Por lo tanto, los dispositivos siempre están 'sondeando' un servicio externo para enviar datos o recibir comandos. Las API hacen que parezca que se están enviando datos a un dispositivo, pero siempre es el dispositivo el que realiza la conexión saliente.
IoT Hub hace esto de dos maneras:
- Enviando datos al punto final del dispositivo
/devices/{deviceId}/messages/devicebound
. Este es un punto final de mensajería AMQP, similar a una cola o suscripción de tema. El dispositivo, cuando lee los comandos, debe acusar recibo si es necesario, lo que forma parte del protocolo AMQP subyacente. Esto funciona igual con MQTT, y https es una alternativa válida. La API envuelve todo esto para usted. Hay conceptos adicionales, como los 'métodos directos', que son una envoltura de API que se basa esencialmente en el mismo protocolo de mensaje subyacente
- Al usar el dispositivo gemelo del lado del servidor, que es una forma de mantener lógicamente las propiedades sincronizadas entre el dispositivo y el servidor. Establece una propiedad en el dispositivo gemelo, y cuando el dispositivo se sincronice, esa propiedad se sincronizará con el dispositivo. Esto se basa menos en mensajes y se basa en el protocolo de administración de dispositivos LWM2M.
Una gran parte del 'sondeo', la conexión, el intercambio de conexiones, los recibos, etc. deben ser atendidos como parte del protocolo AMQP (o MQTT), que a su vez está envuelto en el IoT Hub SDK. Por lo tanto, lo anterior está muy simplificado, pero para reiterar, IoT Hub no puede y nunca intentará enviar datos a una dirección IP / puerto en su dispositivo.