Межпроцессное взаимодействие между приложениями C++ и Java в среде ОС Windows
У нас есть приложение на C++ в Windows, которое запускает процесс java. Эти два приложения должны взаимодействовать друг с другом (через фрагменты xml).
какой метод межпроцессной связи вы бы выбрали и почему?
методы на столе для нас: общий файл(ы), трубы и сокеты (хотя я думаю, что это имеет некоторые проблемы безопасности). Я открыт для других методов.
4 ответов
Я не уверен, почему вы думаете, что связь на основе сокетов будет иметь проблемы безопасности (используйте SSL). Это часто очень хороший подход, как это язык агностик, предполагая, что у вас есть четко определенный протокол общения. Посмотрите на Google протокол буферы, например-они генерируют необходимые классы Java и потоки.
по моему опыту, файловые системы (особенно сетевые файловые системы) не очень подходят для таких общение, поскольку они не обязательно настроены на сообщения (Я видел, что проблемы с кэшированием приводят к тому, что файлы не подхватываются целевым процессом, например).
другой вариант-это сообщения слой ( AMQ или Tibco, например), хотя это, вероятно, потребует больших административных накладных расходов (плюс опыт) для настройки.
лично я бы выбрал подход с чистым сокетом из-за его гибкости и простоты. Вы будет полный контроль.
Я использовал именованные каналы для связи между C# и с++ приложение и не было ничего, кроме хороших результатов. За исключением того, что сокеты, безусловно, путь.
розетки хорошие. Они дают вам возможность очень легко создавать слой тестирования blackbox вокруг каждого компонента, а также запускать каждый компонент на своей машине.
безопасность, безусловно, является проблемой, но есть хороший диапазон вариантов в зависимости от того, насколько это важно. Вы можете использовать SSL, пользовательские рукопожатия, защищенные паролем логины и брандмауэры, чтобы помочь защитить его.
изменить: Не то, что я бы рекомендовал, но есть также общая память с использованием JNI. Просто я подумал, что упомяну об этом, потому что этого нет в твоем списке.