Как определить класс и метод в файле idl DDS?

Я новичок в DDS... пока у меня мало опыта в OpenDDS и CycloneDDS

Можно ли определить класс внутри файла бездействия и иметь переменные-члены и методы-члены? или в стандартах DDS поддерживаются только структуры и примитивные типы данных?


person kobi89    schedule 19.01.2021    source источник


Ответы (2)


Язык IDL определен в спецификации OMG IDL. Он состоит из ряда строительных блоков, включающих основные типы данных, такие как упомянутые вами структуры и примитивные типы данных, и интерфейсы, включающие методы, о которых вы спрашивали.

Однако только часть этих строительных блоков используется DDS. Для текущей версии 4.2 раздел 9.3 Профили DDS определяет, какие из них относятся к трем различным уровням поддержки DDS: Простой DDS, Расширяемый DDS и DDS поверх RPC.

Вы увидите, что последний действительно включает в себя интерфейсы стандартных блоков — базовые, как и следовало ожидать от RPC. Однако не все реализации DDS поддерживают RPC. Простой DDS и Расширяемый DDS поддерживаются чаще, и интерфейсы не являются частью этих функций.

Поскольку вы спрашивали об этом в другом вопросе: обратите внимание, что функциональность интерфейса, описанная в DDS через RPC, предназначена не для распространения объектов с их методами, а для удаленного вызова методов объектов — как подразумевается удаленный вызов процедур.

person Reinier Torenbeek    schedule 19.01.2021

Другой ответ на ваш вопрос заключается в том, что вы, возможно, задаете дополнительный вопрос, как если бы он был первоначальным. Существует много разных способов построения распределенных систем, и, учитывая ваш вопрос, кажутся подходящими три примера:

  • те, которые разработаны для удаленных вызовов процедур/удаленного вызова методов: в этом контексте CORBA является идеальным эталоном, но их много (RPC, gRPC, DCOM, вы называете это);
  • те, которые предназначены для доставки объектов с их реализацией: один пример — Java/JINI, но есть и много других (JavaScript в браузере можно считать одним из них);
  • те, которые разработаны на основе состояния доставки (также известные как обычные старые данные) и добавления/преобразования этого состояния: SPLICE в древней истории, DDS сегодня.

Ваш вопрос предполагает, что вы ищете промежуточное программное обеспечение для выполнения распределенных объектных вычислений. Если это действительно то, что вы ищете, DDS — очень неоптимальный выбор. Да, RPC можно построить поверх него (RPC-over-DDS просто делает это немного проще), и в системе, построенной преимущественно на распределенном состоянии, это имеет смысл.

Если вы можете сериализовать объекты с их методами, то, конечно, вы можете использовать DDS для их распространения в сети (есть забавные вещи, которые вы можете делать таким образом). Однако это больше зависит от используемого вами языка программирования, чем от промежуточного программного обеспечения, и IDL вам в этом не поможет.

person Erik Boasson    schedule 19.01.2021