Межпроцессное взаимодействие между приложением C ++ и Java-приложением в среде операционной системы Windows

StackOverflow https://stackoverflow.com/questions/1209406

  •  06-07-2019
  •  | 
  •  

Вопрос

У нас есть приложение на C ++ в Windows, которое запускает процесс Java.Эти два приложения должны взаимодействовать друг с другом (с помощью фрагментов xml).

Какой метод межпроцессного взаимодействия вы бы выбрали и почему?

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

Это было полезно?

Решение

Я не уверен, почему вы думаете, что связь на основе сокетов будет иметь проблемы с безопасностью (используйте SSL). Часто это очень хороший подход, так как он не зависит от языка , предполагая, что у вас есть четко определенный протокол связи. Ознакомьтесь с буферами протокола от Google. например - они генерируют необходимые классы и потоки Java.

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

Другой вариант - это слой обмена сообщениями (например, AMQ или Tibco), хотя это, вероятно, потребует больших административных затрат (плюс опыта) для настройки.

Лично я бы выбрал подход с чисто сокетами из-за его гибкости и простоты. Вы будете под полным контролем .

Другие советы

Я использовал именованные каналы для связи между C # и кроссплатформенным приложением c ++ и получил только хорошие результаты. Запрет на эти сокеты - определенно лучший способ.

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

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

Редактировать:Не то, что я бы рекомендовал, но есть также общая память, использующая JNI.Просто подумал, что стоит упомянуть об этом, потому что этого нет в вашем списке.

Ice - это круто :))

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top