适用于 C 的 Azure Iot Hub SDK:要使用哪个客户端模块?
Azure Iot Hub SDK for C: which client module to use?
我们正在使用 Azure IoT 中心作为后端解决方案制作 IoT 产品。主要应用程序是用 C 编写的,我们将使用适用于 C 的 Azure SDK。我们研究了 SDK 并决定使用低级客户端。但事情是这样的——Azure SDK 中有多个模块似乎是独立的——iothub_client_ll.h
、iothub_device_client_ll.h
和 iothub_client_core_ll.h
。使用哪一个?
我们还注意到 iothub_device_client_ll.h
没有异步处理设备方法的能力,我们确实需要那个东西。但是 device_client 模块似乎是最新的——也许微软的人正计划从 SDK 中删除 iothub_client_ll
模块?
我们无法在 Azure 网站或 github 存储库文档和讨论中找到这些问题的答案。任何人都可以帮助我们理解这些东西?
如果您查看源文件,您会发现它们都会调用 iothub_client_core_ll,因此使用哪一个都无关紧要。这些不同版本的存在只是为了向后兼容。
我不明白你所说的异步处理是什么意思。这些文件中的 ll 代表低级别,这意味着它们比没有 ll 的版本具有更少的依赖性。其中之一是它在内部不使用任何线程,因此代码可以在不支持线程的处理器上 运行 因此一切都将在单个线程上 运行 并且您将需要调用 IoTHubClient_LL_DoWork
定期(每秒思考 100 次)以连接到集线器并发送和接收消息。如果您需要在第二个线程中处理设备方法,那么您应该使用版本 不带 ll 名称。
我们从现场收到了这个问题并通过电子邮件回复了。出于文档目的,我也会 post 此处回复。
这些都是很好的问题。
iothub_client_ll、iothub_device_client_ll 和 iothub_client_core_ll
客户应使用 iothub_device_client_ll * API。这确实是我们希望人们在未来使用的新方式。 iothub_client_core_ll 仅供内部使用(它支持 device_client/legacy client/module_client)。 iothub_client_ll 是我们之前所拥有的,正如 Sub Zero 正确推测的那样。
那个API好像是做异步方法的,不是我们拿进去的iothub_device_client_ll。从服务端的角度来看,方法是同步的(具体参见 https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-direct-methods,以及开头的段落“直接方法是同步的,并且在超时期限(默认值:30 秒,可设置为 3600 秒”之后要么成功要么失败) .
我们了解在某些情况下(例如固件更新),方法可能会启动一个长 运行 任务。我们在这里提供了一个示例,特别是他们应该检查处理回调的函数 device_method_callback,然后在 method_name==”FirmwareUpdate” 时快速旋转一个线程 returns。 do_firmware_update() 线程完成后,将通过调用 sendChillerReportedProperties() 将其状态更新到服务器,这基本上会更新双胞胎上的报告值。
遗留 iothub_client_ll 中的“async”方法没有集成到孪生中并且价值有限,这就是我们不想将其纳入 iothub_device_client_ll 的原因。
我们正在使用 Azure IoT 中心作为后端解决方案制作 IoT 产品。主要应用程序是用 C 编写的,我们将使用适用于 C 的 Azure SDK。我们研究了 SDK 并决定使用低级客户端。但事情是这样的——Azure SDK 中有多个模块似乎是独立的——iothub_client_ll.h
、iothub_device_client_ll.h
和 iothub_client_core_ll.h
。使用哪一个?
我们还注意到 iothub_device_client_ll.h
没有异步处理设备方法的能力,我们确实需要那个东西。但是 device_client 模块似乎是最新的——也许微软的人正计划从 SDK 中删除 iothub_client_ll
模块?
我们无法在 Azure 网站或 github 存储库文档和讨论中找到这些问题的答案。任何人都可以帮助我们理解这些东西?
如果您查看源文件,您会发现它们都会调用 iothub_client_core_ll,因此使用哪一个都无关紧要。这些不同版本的存在只是为了向后兼容。
我不明白你所说的异步处理是什么意思。这些文件中的 ll 代表低级别,这意味着它们比没有 ll 的版本具有更少的依赖性。其中之一是它在内部不使用任何线程,因此代码可以在不支持线程的处理器上 运行 因此一切都将在单个线程上 运行 并且您将需要调用 IoTHubClient_LL_DoWork
定期(每秒思考 100 次)以连接到集线器并发送和接收消息。如果您需要在第二个线程中处理设备方法,那么您应该使用版本 不带 ll 名称。
我们从现场收到了这个问题并通过电子邮件回复了。出于文档目的,我也会 post 此处回复。
这些都是很好的问题。
iothub_client_ll、iothub_device_client_ll 和 iothub_client_core_ll
客户应使用 iothub_device_client_ll * API。这确实是我们希望人们在未来使用的新方式。 iothub_client_core_ll 仅供内部使用(它支持 device_client/legacy client/module_client)。 iothub_client_ll 是我们之前所拥有的,正如 Sub Zero 正确推测的那样。
那个API好像是做异步方法的,不是我们拿进去的iothub_device_client_ll。从服务端的角度来看,方法是同步的(具体参见 https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-direct-methods,以及开头的段落“直接方法是同步的,并且在超时期限(默认值:30 秒,可设置为 3600 秒”之后要么成功要么失败) .
我们了解在某些情况下(例如固件更新),方法可能会启动一个长 运行 任务。我们在这里提供了一个示例,特别是他们应该检查处理回调的函数 device_method_callback,然后在 method_name==”FirmwareUpdate” 时快速旋转一个线程 returns。 do_firmware_update() 线程完成后,将通过调用 sendChillerReportedProperties() 将其状态更新到服务器,这基本上会更新双胞胎上的报告值。
遗留 iothub_client_ll 中的“async”方法没有集成到孪生中并且价值有限,这就是我们不想将其纳入 iothub_device_client_ll 的原因。