我们正在使用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模块似乎是最新的模块-也许Microsoft家伙正计划从SDK中删除iothub_client_ll
模块?
我们在Azure网站或github存储库文档和讨论中找不到这些问题的答案。任何人都可以帮助我们了解这些东西吗?
答案 0 :(得分:0)
如果查看源文件,您会发现它们全部都调用了iothub_client_core_ll,因此使用哪个文件几乎没有关系。存在这些不同版本仅是为了向后兼容。
我不明白您对异步处理的含义。这些文件中的ll代表低级别,这意味着它们与没有ll的那些版本相比具有较少的依赖性。其中之一是它内部不使用任何线程,因此代码可以在不支持线程的处理器上运行,因此所有内容都将在单个线程上运行,并且您需要定期调用IoTHubClient_LL_DoWork
(每秒思考100次)以连接到集线器并发送和接收消息。如果您需要再次处理设备方法,则应使用没有 ll的版本。
答案 1 :(得分:0)
我们从现场得到了这个问题,并通过电子邮件回复了。出于文档目的,我还将在此处发布回复。
这些都是很好的问题。
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”并快速返回时旋转线程。完成后,do_firmware_update()线程将通过调用sendChillerReportedProperties()来将其状态更新到服务器,该方法基本上会更新双胞胎上的报告值。
旧版iothub_client_ll中的“异步”方法未集成到twin中,并且价值有限,这就是为什么我们不想将其纳入iothub_device_client_ll中的原因。