首页 > 解决方案 > 'Microsoft.Azure.Devices.Client' 中的 ReceiveAsync 方法是否消耗 Internet?

问题描述

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

public Task<Message> ReceiveAsync();

出现在这个命名空间中

namespace Microsoft.Azure.Devices.Client

在这个班级下

public sealed class DeviceClient : IDisposable

我在 while 循环中连续调用此方法,如下所示

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

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

我的问题是:即使receivedMessage总是显示为空,这是否会消耗互联网配额?

标签: c#azureazure-iot-hub

解决方案


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

  • HttpTransportHandler
  • MqttTransportHandler
  • AmqpTransportHandler

使用哪一个,取决于您的配置。HTTP 将发出一个 GET 请求ReceiveAsync(),花费网络流量。

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

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


推荐阅读