Каков наилучший способ реализации С++/Java IPC для следующей ситуации?
(Недавно кто-то спросил аналогичный вопрос, но мои требования более конкретны)
-
У меня есть две программы - одна написанная на С++, другая на Java - для связи друг с другом. Оба работают на одном компьютере.
-
Программы отправляют сообщения друг другу. Сообщения обычно короткие (менее нескольких сотен байтов), но могут иметь размер 100 КБ или более.
-
Сообщения не обязательно должны быть подтверждены (т.е. не модель запроса/ответа, такая как HTTP). Например, программа С++ отправляет сообщение в программу Java, и Java-программа может ответить, отправив сообщение в программу на С++ позднее и наоборот.
-
Идеальное решение будет иметь: a) очень низкую задержку, b) отсутствие проблем безопасности (пользователю не нужно разрешать открывать порты и т.д.), и c) будет несовместимым с платформой.
Моя первая мысль заключалась в использовании сокетов - каждая программа будет выступать в качестве сервера для другого. Сокеты имеют больше накладных расходов, чем другие формы IPC, и я не знаю, как сервер будет информировать клиента о номере порта, если я позволю системе автоматически назначать номера портов. Я также рассмотрел named pipes, но они не поддерживаются (по крайней мере, не последовательно) на разных платформах. JNI выглядит как опция, но может ли он пересекать границы процесса?
Любые предложения?
Спасибо!
ВОПРОСЫ ПОСЛЕДУЮЩИХ ВОПРОСОВ
- Если я поеду с сокетами, мне нужно открыть два сокета для асинхронной связи, как описано выше?