'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()
是否最终会产生网络流量。
我在 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()
是否最终会产生网络流量。