Связь с ресурсами на удаленной CSE - OneM2M - PullRequest
0 голосов
/ 31 января 2019

Мы пытаемся внедрить стандарт 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.Затем я могу отправить запрос на обнаружение в 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 может понять, что это связано с RemoteCSE, просмотрев часть / mn-cse34 пути запроса, потому чтоон не начинается с resourceid IN-CSE.

Таким образом, IN-AE (например, смартфон) каким-то образом должен решить, какой CSE должен обрабатывать запрос?Есть ли что-то, что мы считаем неправильным?

--------------------- РЕДАКТИРОВАНИЕ --------------------------------------

enter image description here

Я проверил архитектуру приложенияРуководство разработчика TR-0025 http://www.onem2m.org/application-developer-guide/architecture

Согласно этому примеру, смартфон (IN-AE) может управлять Light # 1 (ADN-AE-1) через IN-CSE.

ПослеПроцессы регистрации и создания начального ресурса завершены, система готова обнаруживать и затем управлять индикаторами.

GET /~/mn-cse/home_gateway?fu=1&rty=3&drt=2 HTTP/1.1
Host: in.provider.com:8080

Хотя CSE-ID среднего узла и имя CSEBase среднего узла используется в URL-адресе HTTP-запроса, хост адресуетсяв IN-CSE.Это означает, что запрос на обнаружение, отправленный из IN-AE, сначала обрабатывается IN-CSE, а затем перенаправляет его в mn-cse.Однако вы сказали мне обратное, сказав: « Поиск или обнаружение обычно ограничиваются только ресурсами хост-CSE и не передаются на удаленные CSE автоматически. ».

На TR-0025 данный пример показан как общий сценарий.А также в TR-0034, фактически он обрабатывает запрос, как вы видите на диаграмме.

enter image description here

1 Ответ

0 голосов
/ 31 января 2019

В вашем вопросе есть много вопросов, которые необходимо решить.

Прежде всего, в oneM2M нет специального объекта с именем "IN-AE".Это просто имя, которое используется для AE, который подключается к IN-CSE в oneM2M's TR-0025: Управление освещением с использованием HTTP-привязки Руководство разработчика.Прикладная сущность может быть фактически подключена к IN-CSE или MN-CSE по тому же протоколу (mca), хотя могут существовать AE, которые специально предназначены для работы на одной конкретной CSE.

Относительно вашей точки зрения2, разница между запросом retrieve и discovery :
Запрос retrieve нацелен на ресурс для его извлечения.Например, запрос на получение, отправленный ресурсу Container / mn-cse34 / cnt-1 (из вашего примера), извлечет сам ресурс Container и егоАтрибуты.
Запрос discovery также нацелен на ресурс, и технически он очень похож на обычный запрос retrieve .Но кроме того, вы предоставляете критерии фильтра и тип результата обнаружения .Например, запрос на обнаружение, отправленный на тот же контейнер ресурс / mn-cse34 / cnt-1 , может вернуть все ссылки на ContentInstances из этого Контейнер ресурс.В зависимости от фильтра и типа результата вы можете получить полные ресурсы или только ссылки на них.

Пожалуйста, ознакомьтесь со спецификацией oneM2M TS-0001 Функциональная архитектура , разделы 10.2.6 Обнаружение и 8.1.2 Запрос для полного объяснения и список возможных параметров для запроса discovery .

Относительно пунктов 1 и 3Ваш вопрос: я не знаю, что хочет решить ваша АЕ, но она должна иметь представление о встроенной структуре данных. Хорошая идея - организовать данные структурированным и единообразным способом, например, используя Контейнеры , FlexContainers , Группы и т. Д. Таким образом, приложению не нужно просматривать все дерево ресурсов CSE, которое со временем может стать действительно большим.Конечно, может случиться так, что это общее приложение, которое должно пройти через большую и ранее неизвестную структуру.В этом случае приложение может использовать запрос discovery для получения соответствующих ресурсов.Обратите внимание, что вы также можете выполнять поиск по метаданным ресурсов, например, меток, даты и времени и т. Д. Это может быть полезно для сокращения набора результатов.

Как правило, поиск или обнаружение ограничивается толькоресурсы хостинговой CSE, и не переходит к удаленным CSE автоматически.Исключением являются объявленные ресурсы.Эти ресурсы объявляются удаленной CSE, где они получают своего рода «теневой» аналог, и они предоставляют вашему приложению некоторую информацию о состоянии ресурсов, а также о том, как их получить (через атрибут ссылки).Но если вы действительно хотите получить доступ к удаленной CSE, и у вашего приложения есть для этого права доступа, атрибут pointOfAccess предоставляет вам адрес удаленной CSE.

Но, как уже было сказано, вОбщее ваше приложение (AE) подключено к одному CSE.На этой CSE размещаются все ресурсы AE или ресурсы, к которым AE имеет доступ.Также имейте в виду, что AE должно иметь разрешение (через AccessControlPolicy ) на CSE для доступа к ресурсу.

Обновление

ВозможноМне нужно немного подробнее рассказать о том, как работать с удаленной CSE.Пока игнорируется объявленный ресурс , есть две возможности, что ваш "IN-AE" может получить доступ к ресурсу на удаленном CSE:

  • Вы можете отправлять запросы, такие как извлекать , обновлять и т. Д., На удаленный ресурс CSE в IN-CSE.Эти запросы затем направляются в реальный экземпляр "mn-cse" соединением Mcc между IN-CSE и MN-CSE.Это имеет то преимущество, что «IN-AE» не нужно заботиться о том, как напрямую подключиться к MN-CSE «mn-cse» (например, могут быть установлены межсетевые экраны и т. Д. Для защиты MN-CSE).
    Это можно увидеть, посмотрев запрос HTTP в примере TR-0025 (http://www.onem2m.org/application-developer-guide/implementation/content-instance-retrieve)
    GET /~/mn-cse/home_gateway/light_ae1/light/la HTTP/1.1
    Этот получатель запроса http - IN-CSE. Но, как вы можетевидим, что он нацелен на ContentInstance на удаленном CSE mn-cse .
  • Если вам действительно необходим прямой доступ к удаленному CSE, например, из соображений производительности, то ваш«IN-AE» может извлечь атрибут pointOfAccess и напрямую обратиться к удаленному CSE «mn-cse». В этом случае «IN-AE» фактически становится AE удаленного CSE «mn-cse»и должен знать, как к нему подключиться.
...