2012-04-05 3 views
4

Я просто заканчиваю относительно большой проект в scala и скоро начну с другого родственного.Есть ли какой-либо проект/набор библиотек, которые облегчают общение между различными языками программирования/платформами?

Я еще не выбрал язык и хотел бы, чтобы мое решение основывалось на особенностях языка или доступных библиотек, чем на совместимости.

И это повод спросить об этом.

Мои требования (вверху более важно):

  1. взаимодействие между различными языками/платформ программирования (вероятные из них являются JVM, Haskell, Python, C/C++)
  2. легко прототип/рефакторинг
  3. легко программировать
  4. производительных без особого беспокойства для оптимизации с моей стороны (это может исключить использование файлов)
+5

* Есть ли какой-либо очевидный общий способ общения между различными языками программирования/платформами? * Как насчет HTTP? Возможно, вам нужно быть немного более конкретным. – MattH

+0

Зачем вам нужно взаимодействовать между разными языками? – wvd

+0

вы можете использовать сокеты и определить свой собственный протокол, возможно, используя некоторую широко поддерживаемую библиотеку сериализации, такую ​​как [JSON] (http://www.json.org) –

ответ

5

Одним из самых простых способов общения между программами, написанными на разных языках и распространяемыми на разных платформах, является использование библиотеки message passing.

ZeroMQ является одним из моих любимых благодаря своей простоте, скорости и наличия креплений для значительного числа языков: http://www.zeromq.org/bindings:_start

Вы также могли бы использовать ActiveMQ, RabbitMQ, или то, что вы столкнетесь, что имеет привязки на нескольких языках.

2

Я почти все свое сообщение через Redis, его удивительно просто перемещать данные между языками точно и быстро. Его простой ключ/магазин базы данных, что позволяет мне сделать это в Python и

import redis 
r = redis.Redis() 
r.set("a", 33) 

А потом, почти тот же самый код в Java (минус массивную инициализацию, потому что ява многословен)

r.get("a"); // in java 
+0

Ницца, похоже, это довольно хорошее решение. Redis реализован в Python, Java и Haskell, поэтому он точно соответствует вашему выбору. Только C++ просто потребует немного дополнительной работы. – wvd

+0

Большая часть рабочей реализации находится здесь https://github.com/mrpi/redis-cplusplus-client Посмотреть другие клиенты здесь http://redis.io/clients –

2

+ 1 для передачи сообщений, особенно если библиотека будет откладывать доставку, когда получатель недоступен. Если вы решили использовать обмен сообщениями, вам нужно будет определить протокол обмена сообщениями. Одним из хороших вариантов является Representational State Transfer (ReST), который, несмотря на свое название, является протоколом взаимодействия с сообщениями на основе сообщений, основанным на HTTP. Это требует чрезвычайно тщательного определения API, которое само по себе является очень хорошей вещью.

Надеюсь, что это поможет.

+0

Я использую ReST широко, но, я ищу что-то что делает его немного легче прототипом. Может быть, я должен добавить «прототип» в качестве требования. Хорошее предложение в любом случае. –

2

Есть много способов, но они разделены на три основных варианты:

  1. использовать какое-то централизованный узел связи (Message Queue, Key-Value магазин, может быть, базы данных);
  2. Кросс-платформенная технология распределенных объектов (например, CORBA);
  3. HTTP, используя любой подход к веб-сервисам, который вам нравится (хотя большинство людей не промывают мозги Enterprise Borg, как успокаивающие веб-сервисы разного рода), непосредственно между компонентами.

Я бы проигнорировал 2 (это никогда не бывает так просто).

Что касается 1, обратите внимание, что базы данных, как правило, не должны использоваться в качестве поддельной платформы для передачи сообщений. Используйте это только в том случае, если речь идет о хранении наборов данных. Также обратите внимание, что http://redis.io является хранилищем сообщений и хранилищем ключей.

+1

+1 для предприятия Borg! – Landei

+0

@Marcin Спасибо за разделение на три основных способа сделать это. Подобное мышление облегчает рассуждение о проблеме. –

+0

@AlexandreMartins Нет проблем. – Marcin

Смежные вопросы