Под «локальным» я подразумеваю, что оба работают в одной подсети, в большинстве случаев на одном хосте / ВМ, поэтому некоторые стандартные межплатформенные межплатформенные механизмы RPC, такие как SOAP, XML-RPC, CORBA и т. Д., Кажутся ненужными.
Полезная нагрузка состоит в основном из числовых (в основном табличных) данных с небольшим количеством метаданных (например, доступные службы данных, описание / тип данных и т. Д.) Из C ++ в Java и событиями пользовательского интерфейса консоли / сценария изJava для C ++.Таким образом, программа на C ++ действует как сервер, а программа на Java - как клиент.
Я могу перечислить несколько вариантов (в основном из поиска по этому замечательному сайту), но я никогда не использовал и не видел ни одного из них в реальных тяжелых условиях.ситуация, поэтому я действительно надеюсь, что кто-то, кто "был там, сделал это", может рассказать мне о плюсах и минусах вариантов.
- Общая память
- Pipe, stdin / stdout,и т. д.
- Пользовательская структура данных через обычный сокет (возможно, UDP) ( этот вопрос )
- Сообщения через простой сокет, могут быть буфером протокола Google, Thrift, JSON и т. д.. ( этот ответ , среди прочих)
- Java RMI с сервером C ++ RMI ( этот вопрос )
- JNI (некоторые ответы в этот вопрос )
Я почти уверен, что пропустил много вариантов.Спасибо всем за помощь!
Отредактировано: я забыл упомянуть, что производительность не является серьезной проблемой, поскольку ожидается, что пропускная способность не будет большой (сервер сильно привязан к базе данных), но этоБыло бы важно знать, если один из вариантов будет намного быстрее или медленнее.Например, я полагаю, что ничто не сравнится с разделяемой памятью (если все сделано правильно).