IoT Hub接続デバイスが使用するモデルは、着信接続を受け入れないというものです。IoT Hubデバイスは「サーバー」として機能することはありません。これは、Azure IoTのセキュリティモデルの重要な部分です。これに関する決定的なモデルは、Clemens Vastersの「Service Assisted Communication」にカプセル化されています。
したがって、デバイスは、データを送信したりコマンドを受信したりするために、常に外部サービスを「ポーリング」しています。APIは、データがデバイスに送信されているように見えますが、常に送信接続を行うデバイスです。
IoTハブはこれを2つの方法で行います。
- デバイスエンドポイントにデータを送信する
/devices/{deviceId}/messages/devicebound
。これは、キューまたはトピックサブスクリプションに似たAMQPメッセージングエンドポイントです。デバイスは、コマンドを読み取るときに、必要に応じて受信を確認する必要があります。これは、基礎となるAMQPプロトコルの一部です。これはMQTTでも同じように機能し、httpsは有効なフォールバックです。APIは、これらすべてをまとめてくれます。基本的な同じメッセージプロトコルのAPIラッパーである「ダイレクトメソッド」などの追加の概念があります。
- サーバー側のデバイスツインを使用して、デバイスとサーバー間でプロパティの同期を論理的に維持する方法。デバイスツインにプロパティを設定し、デバイスが同期すると、そのプロパティがデバイスに同期されます。これはメッセージベースではなく、LMM2Mデバイス管理プロトコルの上に構築されています。
AMQP(またはMQTT)プロトコルの一部として、多くの「ポーリング」、接続、接続の共有、受信などを処理する必要があります。これは、IoT Hub SDKにまとめられています。したがって、上記は非常に単純化されていますが、繰り返しになりますが、IoT HubはデバイスのIPアドレス/ポートにデータを送信しようとすることはできませんし、送信しません。