'Microsoft.Azure.Devices.Client' 中的 ReceiveAsync 方法是否消耗 Internet?

Does ReceiveAsync Method in 'Microsoft.Azure.Devices.Client' Consumes Internet?

我在 IoT 设备上使用 Azure SDK。我依赖的方法之一是

public Task<Message> ReceiveAsync();

出现在这个命名空间中

namespace Microsoft.Azure.Devices.Client

下面这个class

public sealed class DeviceClient : IDisposable

我在一个while循环中连续调用这个方法如下

        while (true)
        {
            var receivedMessage = await _deviceClient.ReceiveAsync(TimeSpan.FromSeconds(3)).ConfigureAwait(false);

            if (receivedMessage != null)
            {
              //Do staff
            }
        }

我的问题是:即使 receivedMessage 始终显示为空,这是否会占用互联网配额?

深入挖掘源代码,您会发现三个处理程序:

  • HttpTransportHandler
  • MqttTransportHandler
  • AmqpTransportHandler

使用哪一个,取决于你的配置。 HTTP 将在每个 ReceiveAsync() 发出一个 GET 请求,消耗网络流量。

MQTT 处理程序在 TCP 或 WebSockets 上运行,其中可能涉及保活流量。但鉴于这种通信是双向的,发生的大多数流量都涉及实际传递的消息。 ReceiveAsync() 只是从内部接收队列中获取第一条消息(如果有),或者等待一条消息到达,它不会进行轮询。

AMPQ 处理程序也在消息队列上运行,我不太清楚 ReceiveAsync() 是否最终会产生网络流量。