Межпроцессное взаимодействие между приложением C ++ и приложением Java в среде ОС Windows - PullRequest
6 голосов
/ 31 июля 2009

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

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

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

Ответы [ 4 ]

9 голосов
/ 31 июля 2009

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

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

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

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

3 голосов
/ 31 июля 2009

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

2 голосов
/ 31 июля 2009

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

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

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

1 голос
/ 31 июля 2009

Лед довольно круто :) 1003 *

...