c# - '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
总是显示为空,这是否会消耗互联网配额?
解决方案
挖掘源代码,您会发现三个处理程序:
HttpTransportHandler
MqttTransportHandler
AmqpTransportHandler
使用哪一个,取决于您的配置。HTTP 将发出一个 GET 请求ReceiveAsync()
,花费网络流量。
MQTT 处理程序在 TCP 或 WebSockets 上运行,其中可能涉及 keepalive 流量。但鉴于这种通信是双向的,发生的大多数流量都涉及实际传递的消息。ReceiveAsync()
只是从内部接收队列中获取第一条消息,如果有的话,或者等待一个到达,它不会轮询。
AMPQ 处理程序也在消息队列上运行,我不太清楚是否ReceiveAsync()
最终会产生网络流量。
推荐阅读
- json - 如何使用 JMESPath 根据子属性数组中包含的值过滤对象数组
- python - 在python中使用beautifulsoup从不同类型的html中提取数据
- javascript - 从谷歌表格中的 importhtml 生成的单元格中删除 * 符号
- hugo - Hugo 可以在语言导航器中标记当前语言吗?
- javascript - 在没有提交按钮的情况下提交 hcaptcha 令牌
- css - 容器的图像分辨率太高使图像看起来模糊
- java - Mockito 3 any() 严格的存根参数不匹配
- javascript - node.js中的环境变量未定义错误
- javascript - 如何切换 Bullist/numlist TinyMCE
- python - 如何在 Django 模型中的多对多关系中设置 UniqueConstraint