onem2m - oneM2M 中的执行器控制
问题描述
我阅读了在 OneM2M 中进行双向通信的文档。我知道这样做的一种方法是使用订阅和通知系统。假设我们有一个如下图所示的示例。IN-AE(智能手机)想打开ADN-AE2的灯。假设注册和资源创建已经完成,并且 ADN-AE-2 已经订阅了 ADN-AE-2 中的灯容器。
因此,oneM2M 涵盖了 IN-AE 如何发送光控请求以及 ADN-AE-2 或 ADN-AE-1 如何获取来自 IN-AE 的请求并执行它的部分。但是,如果 ADN-AE-2 无法控制灯光并在控制时出现故障怎么办。应该是什么场景?已使用 IN-AE 发送的请求创建了 contentinstance。
1- ADN-AE-2 是否应该创建另一个内容实例,它是容器的先前状态
2- ADN-AE-2 是否应该删除未执行的内容实例(那么其他接收通知并成功执行的订阅者呢)
如果执行器无法执行操作,推荐的方式应该是什么?
http://www.onem2m.org/tr-0034/procedures/actuator-switch-control
解决方案
这是异步通信中的普遍问题。当接收者从未收到命令,或者只是无法执行它(无论出于何种原因,例如它正忙于做其他事情或请求超出某些参数)时会发生什么?
您的两个选项都有效,但在 ADN 离线时将不起作用,因此 ADN-AE2 无法执行这些过程。此外,即使 ADN 始终在线,当有多个其他 AE 想要控制 ADN-AE2 时,或者当 IN-AE 不耐烦地一次又一次地设置所需状态时,这两个程序都会出现问题。这通常可能导致竞争条件。
我建议重新考虑两个 AE 之间的通信方案,并将原始 Container 拆分为两个:一个 Container 用于目标状态,另一个 Container 用于状态状态。除了 ADN-AE2 之外,AE使用目标Container 来设置所需的状态。ADN-AE2 被通知创建了一个新的 ContentInstance 并相应地采取行动。然后它在状态容器中创建一个新的 ContentInstance来反映新的内部状态,这将通知 IN-AE 以反映更改。
下图反映了此模式的示例资源结构:
AE ─┬─ Container_target ─── ContentInstances* ◀═══ Container for desired state, set by other AEs
│
└─ Container_state ─── ContentInstances* ◀═══ Container for actual state, set only by this AE
当节点之间的连接并不总是可靠时,或者当状态更改请求的结果并不总是得到保证时,这是异步通信中的一种常见模式。执行请求的责任在于 ADN-AE2,重试频率或对失败做出反应的策略在于 IN-AE。
推荐阅读
- email - 如何在 WSO2 产品中设置 SMTP Office365 邮件配置
- python-3.x - (Python)替换字符串元素数组
- filesystems - 如何在linux上以非阻塞方式显示最大的文件?
- c# - IMAPX - 下载 .GZ - GZip 文件
- azure - Azure 使用逻辑应用将文件从文件存储加载到 Blob 存储
- javascript - 如何将 JSON 字符串对象值转换为整数?
- wix - 为什么 WiX Torch 给我一个错误代码 0279?
- ios - xcode/swift 中类名的错误?
- python - How to iterate through a tuple list of lists, and get all elements one by one in python?
- c# - 我的 c# 代码对所有 if 语句都进行了彻底检查,尽管它们都是错误的