Кроссплатформенная альтернатива COM - PullRequest
9 голосов
/ 07 июня 2009

Я был очарован компонентным программированием (будь то COM, другая система или просто использование парадигмы на простом C ++). Это требует некоторого привыкания, если вы обычно привыкли к «традиционной» модели ООП, но это определенно стоит того. Это сделало мой код более понятным и легким в расширении.

В проекте, над которым я сейчас работаю, используется парадигма, но не задана система. Однако мне бы очень хотелось найти какую-то систему, которую я мог бы использовать со следующими требованиями. Переход с того, что у меня сейчас есть, на новую систему занял бы немного времени, но я бы сэкономил это время позже.

Требования:

  1. Кроссплатформенный
  2. Быстро
  3. Хорошо работает с C ++
  4. Поддерживает межпроцессное распределение

Позвольте мне уточнить эти требования:

Cross-Platform

В принципе, он мне нужен для работы на Windows и Mac. Linux был бы хорош, но это ни в коем случае не важно. Кроме того, он действительно должен соответствовать другим требованиям для всех платформ. Есть COM для Mac, который был бы идеальным, но он не поддерживает требование 4. Кроме того, он должен поддерживать как GCC, так и MSVC.

Fast

Именно здесь CORBA, к сожалению, проигрывает, хотя и выполняет три других требования. Вызовы внутрипроцессных методов должны быть максимально быстрыми (в идеале, например, COM), поскольку некоторые из подпрограмм могут также вызываться из звукового прерывания.

Хорошо работает с C ++

... Я думаю, это в основном очевидно. Я не возражаю против того, чтобы не использовать классы C ++ для реализации компонентов, хотя это определенно было бы полезно, и альтернатива все еще должна быть простой в использовании, тем более что в конечном итоге я собираюсь выпустить API для сторонних расширений.

Поддерживает межпроцессное распределение

Под этим я подразумеваю, по крайней мере, возможность сериализации вызовов. Если это делается с помощью кода, сгенерированного из IDL, это прекрасно для меня, и я также не против реализовать сам процесс межпроцессного взаимодействия.

COM был бы хорош, но он не полностью соответствует требованию 1. CORBA тоже была бы великолепна, но она не отвечает требованию 2 (даже с самым быстрым ORB). XPCOM может не соответствовать требованию 2 и не работает с MSVC, поэтому не соответствует требованию 1.

Есть идеи, что еще там? Следующим моим шагом будет накатить свой собственный, используя protobufs или что-то подобное, но, конечно, я бы хотел этого избежать.

Обновление

Для уточнения - звуковое прерывание в этом контексте может быть всего 2-3 мс. Это время даже не доступно для меня полностью, так как другие компоненты должны обрабатываться в это время, и мое программное обеспечение само по себе оборачивает другую часть программного обеспечения, которая должна обрабатываться в это время. Вот почему как внутрипроцессное, так и межпроцессное сортирование должно быть чрезвычайно быстрым.

Ответы [ 9 ]

3 голосов
/ 08 июня 2009

ICE от ZeroC http://www.zeroc.com/ - другая альтернатива.

Для тех старожилов CORBA Мичи Хеннинг была одним из гуру дня. Сейчас он с ZeroC. Это кроссплатформенная система с открытым исходным кодом, включающая все ваши цели (включая Linux), системную.

C ++ - это только один из языков, и привязки ICE C ++ значительно лучше, чем привязки CORBA C ++.

3 голосов
/ 07 июня 2009

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

2 голосов
/ 11 октября 2012

Не должно ли Qt быть альтернативой?

http://qt.io

AFAIKT вы можете использовать его по крайней мере на: Windows | Mac | Linux / X11 | Солярис | Встроенный Linux | Windows Embedded | Программное обеспечение Green Hills INTEGRITY | QNX | VxWorks

Это довольно много, ИМХО.

2 голосов
/ 07 июня 2009

CORBA, безусловно, будет ответом - вы должны проверить его, прежде чем отклонить его по скорости.

Определенной альтернативой может быть XPCOM http://en.wikipedia.org/wiki/XPCOM - отсутствие MSVC не означает не кроссплатформенность.

Удачи

1 голос
/ 08 июня 2009

Взгляните на D-Bus (да, для windows тоже ), который является современным духовным наследником различных компонентных структур (CORBA, Gnome Bonobo, DCOM KDE).

Если межпроцессное упорядочение оказывается проблемой производительности, попытайтесь перенести тяжелую работу на разделяемую память ( boost.interprocess поможет сохранить ее кроссплатформенной).

1 голос
/ 07 июня 2009

Вы говорите, что CORBA была бы великолепна. Я могу только предположить, что вы никогда не использовали его. Это sprogramming nightmnare, и не предлагает мобильность, которую он требует. Я бы использовал его, только если существующее приложение уже реализовало его. Тем не менее, я бы не стал разбираться с этим из соображений производительности - у меня никогда не возникало проблем с производительностью ни с одной из реализаций CORBA, которые я использовал.

1 голос
/ 07 июня 2009

Почему вы думаете, что CORBA недостаточно быстр? Вы измеряли вещи недавно?

Современные реализации CORBA могут выполнять удаленные вызовы менее чем за 150 пользователей. Намного ниже вашего бюджета на 2 мсек. Современные реализации CORBA могут оптимизировать внутрипроцессные вызовы, в основном, к двум вызовам виртуальных функций, хотя для этого обычно требуется, чтобы приложение отказалось от некоторых функций (например, перехватчиков). Даже полнофункциональные в худшем случае локальные вызовы - это пара поисков некоторые виртуальные звонки, у меня нет удобных номеров, но я уверен, что это ниже 50 usecs.

Проверьте это для некоторых номеров производительности:

http://www.dre.vanderbilt.edu/Stats/performance.shtml

0 голосов
/ 08 июня 2009

Думаю, вам стоит взглянуть на VortexLibrary .

Это полная реализация BEEP, которая обеспечивает хорошую основу для разработки любого однорангового протокола приложения. Он уже объединяет аутентификацию (с использованием SASL) и безопасные соединения (с использованием TLS), оба варианта.

Vortex также включает в себя реализацию профиля XML-RPC с IDL-компилятором, который должен предоставить вам достаточную основу для сортировки ... и самое лучшее, что вы можете позже предоставить более конкретный протокол поверх одной и той же сессии, чтобы выполнить двоичную передачу без ограничения XML-RPC.

Он запрограммирован на C, но также работает с C ++. В настоящее время он работает с регрессионными тестами, обеспечивающими его работу в Linux, Windows и MAC.

Ура!

0 голосов
/ 07 июня 2009

Взгляните на AF Architecture :

«Af-Arch - это полный набор библиотек и инструментов, который позволяет разрабатывать распределенную систему, специально предназначенную для решения проблем с бизнес-приложениями.»

Я знаю, что это работает с Linux и Windows. Я также знаю, что у него очень быстрый C API и привязки C # для него.

...