我们正在尝试实施 oneM2M 标准,并且对 Remote CSE 和 IN-CSE 之间的通信过程有疑问。我在下面一步一步地写了我从文档中理解的内容。有些问题对我们来说不是很清楚,所以在进行任何实施之前,我需要确保一切都非常清楚。
在告诉我们从文档中了解的所有内容之前,我会问这个问题。然后我将一步一步地写出我们认为的解决方案是什么。问题是,由 IN-AE 发送的请求是针对 MN-CSE 的,IN-CSE 应该将请求重定向到 MN-CSE 或者它应该自己处理它。
首先,我们有两个完全独立的 CSE。一种是 IN-CSE,另一种是 MN-CSE,如下所示。
IN-CSE 有一个资源树
/in-cse61
/in-cse61/csr-34
/in-cse61/ae-1234
MN-CSE 有一个资源树
/mn-cse34
/mn-cse34/csr-61
/mn-cse34/ae-123456
/mn-cse34/cnt-1
/mn-cse34/cin-01
/mn-cse34/cin-02
/mn-cse34/cin-03
/mn-cse34/cnt-2
我们暂时跳过了任何安全问题。假设 IN-AE 想要与 MN-CSE 通信,正如我们在上面的问题中所说的那样。
1- IN-AE 应该向 IN-CSE 发送发现或检索请求,告诉我所有子资源 Remote CSE。
2- 发送发现或发送检索请求之间的确切区别是什么?我们认为发现请求仅返回资源 uri,但检索请求返回确切资源的整个数据。这种方法正确吗?
3- 获得所有 remoteCSE 后,现在我知道 remoteCSE 的 ID。然后我可以向 MN-CSE 发送一个发现请求以获取其中的 AE。我们认为有两种选择:
一种。~/in-cse61/csr-34?fu=1&rty=2
b. ~/mn-cse34?fu=1&rty=2
选项 a:如果 IN-AE 只想对 IN-CSE 的资源树进行发现请求,IN-CSE 应该处理它而不将其重定向到 MN-CSE。因为 IN-CSE 已经知道 /in-cse61/csr-34 对它来说是一种有效的 RemoteCSE,但是请求路径以 ~/in-cse61 开头,所以它应该由 IN-CSE 处理。
选项 b:如果 IN-AE 想要对 MN-CSE 的资源树进行发现请求,那么 IN-CSE 可以通过查看请求路径的 /mn-cse34 部分来了解它与 RemoteCSE 相关,因为它不以 IN 开头-CSE 的资源 ID。
所以 IN-AE(例如智能手机)应该以某种方式决定哪个 CSE 应该处理请求?我们觉得有什么不对吗?
---------------------已编辑---------------------------- ----------
我检查了应用程序开发指南 TR-0025 http://www.onem2m.org/application-developer-guide/architecture的架构
根据这个示例,智能手机 (IN-AE) 可以通过 IN-CSE 控制 Light#1(ADN-AE-1)。
在注册和初始资源创建过程完成后,系统准备好发现并控制灯。
GET /~/mn-cse/home_gateway?fu=1&rty=3&drt=2 HTTP/1.1
Host: in.provider.com:8080
虽然中间节点 CSE-ID 和中间节点 CSEBase 名称用于 HTTP 请求 url,但主机寻址到 IN-CSE。这意味着,从 IN-AE 发送的发现请求,首先由 IN-CSE 处理,然后将其重定向到 mn-cse。然而,您告诉我相反的说法“<em>检索或发现通常仅限于托管 CSE 的资源,不会自动遍历远程 CSE。”。
在 TR-0025 中,给出的示例显示为常见场景。同样在 TR-0034,实际上它正在遍历请求,如图所示。