Каковы хорошие альтернативы для связи между локальными программами C ++ и Java?

Под "локальным" я подразумеваю, что оба они работают в одной подсети, в большинстве случаев на одном и том же хосте / виртуальной машине, поэтому некоторые стандартные межсетевые кросс-платформенные механизмы RPC, такие как SOAP, XML-RPC, CORBA и т. Д. кажутся ненужными.

Полезная нагрузка - это в основном числовые (в основном табличные) данные с небольшим количеством метаданных (например, доступные службы данных, описание / тип данных и т. Д.) От C ++ до Java, а также события интерфейса консоли / сценария от Java до C ++. . Таким образом, программа на C ++ действует как сервер, а программа Java - как клиент.

Я могу перечислить несколько вариантов (в основном из поиска на этом замечательном сайте), но я никогда не использовал и не видел ни одного в реальной тяжелой ситуации, поэтому Я действительно надеюсь, что кто-то, кто «был там, сделал это», сможет рассказать мне о плюсах и минусах этих опций.

  1. Общая память
  2. Канал, stdin / stdout и т. Д.
  3. Пользовательская структура данных через простой сокет ( возможно UDP) ( этот вопрос )
  4. Сообщения через простой сокет, может быть буфер протокола Google, Thrift, JSON и т. д. ( этот ответ , среди прочего)
  5. Java RMI с сервером C ++ RMI ( этот вопрос )
  6. JNI (некоторые ответы в этот вопрос )

Я почти уверен, что пропустил много вариантов. Спасибо всем за вашу помощь!


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

9
задан Community 23 May 2017 в 01:44
поделиться