Использование IPC для объединения нескольких языков

Это общий «нубский» вопрос о разработке программного обеспечения, поэтому я прошу прощения, если он кажется расплывчатым, но буду очень признателен за совет. Обратите внимание, что система, описанная ниже, является просто примером, а не конкретным продуктом, который я имею в виду.

У меня часто возникает необходимость совместить функционал нескольких библиотек или утилит, написанных на разных языках. Например, если я хочу написать высокопроизводительное -приложение для обработки звука для рабочего стола, я напишу его на C/C++. Затем я хочу добавить приятный графический интерфейс. Но я не хочу изучать Qt. Мне нравится внешний вид Adobe Air, и я хотел бы его использовать. Позже мне нужно получить доступ к USB-устройству. Но библиотека USB, которая у меня есть, имеет только API на Java. Как я могу объединить все эти элементы вместе, чтобы воспользоваться их относительными преимуществами?

Понятно, что я не могу скомпилировать эти различные элементы в один исполняемый файл. Поэтому мне нужно создать и запустить их отдельно и дать им возможность общаться.Наиболее распространенным способом сделать это, по-видимому, является использование IPC (Inter Process Communication ), например, разделяемой памяти или сокетов. Я предпочитаю идею сокетов, поскольку программы потенциально могут работать на отдельных машинах в сети.

Поэтому я решил создать локальную систему клиент/сервер с собственным API, чтобы позволить этим элементам взаимодействовать. Например, приложение Air получит сообщение от приложения C, говорящее ему обновить свой пользовательский интерфейс. Приложение USB, работающее на Java, будет использовать сокеты для потоковой передачи звука с оборудования USB в приложение C.

Мой вопрос :является ли использование локальных сокетов типичным способом проектирования такой системы? Будет ли производительность намного хуже, чем у действительно нативного приложения (, например. все на Java или C в одном исполняемом файле )? Также кажется вероятным, что такой подход будет подвержен ошибкам и сложен в обслуживании?

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

Заранее спасибо!

6
задан darasan 2 August 2012 в 05:41
поделиться