2012-04-05 9 views
4

Ich beende gerade ein relativ großes Projekt in scala und werde bald ein anderes verwandtes beginnen.Gibt es ein Projekt/eine Gruppe von Bibliotheken, die die Kommunikation zwischen verschiedenen Programmiersprachen/Plattformen erleichtern?

Ich habe die Sprache noch nicht ausgewählt und möchte, dass meine Entscheidung mehr auf Features der Sprache oder verfügbaren Bibliotheken als Interoperabilitätsbedenken basiert.

Und das ist der Grund, dies zu fragen.

Meine Anforderungen sind (oben ist wichtiger):

  1. Interoperabilität zwischen verschiedenen Programmiersprachen/Plattformen (wahrscheinlich diejenigen sind JVM, Haskell, Python, C/C++)
  2. leicht Prototype/refactor
  3. einfach auf meinen Teil
  4. performant ohne viel Sorge für die Optimierung zu programmieren (diese Dateien ausschließen können unter Verwendung)
+5

* Gibt es einen offensichtlichen allgemeinen Weg, zwischen verschiedenen Programmiersprachen/Plattformen zu kommunizieren? * Wie wäre es mit HTTP? Möglicherweise müssen Sie etwas genauer sein. – MattH

+0

Warum müssen Sie genau zwischen vielen verschiedenen Sprachen wechseln? – wvd

+0

Sie könnten Sockets verwenden und Ihr eigenes Protokoll definieren, vielleicht unter Verwendung einer weit verbreiteten Serialisierungsbibliothek wie [JSON] (http://www.json.org) –

Antwort

5

Eine der einfachsten Möglichkeiten zur Kommunikation zwischen Programmen, die in verschiedenen Sprachen geschrieben sind und auf verschiedene Plattformen verteilt sind, ist die Verwendung einer message passing-Bibliothek.

ZeroMQ ist eine meiner Lieblings aufgrund seiner Einfachheit, Schnelligkeit und die Verfügbarkeit von Bindungen für eine beträchtliche Anzahl von Sprachen: http://www.zeromq.org/bindings:_start

Sie könnten auch verwenden ActiveMQ, RabbitMQ, oder was auch immer Sie kommen über das hat Bindungen in mehreren Sprachen.

2

Ich mache fast alle meine Kommunikation über Redis, es ist erstaunlich einfach, Daten zwischen Sprachen genau und schnell zu bewegen. Es ist eine einfache Schlüssel/Speicher-Datenbank, die mich in Python und

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

Und dann in Java, fast den gleichen Code zu tun erlaubt (minus die massive Initialisierung, weil Java ausführlich ist)

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

Schön, das scheint eine ziemlich gute Lösung zu sein. Redis ist in Python, Java und Haskell implementiert, so dass es genau zu Ihrer Wahl passt. Nur C++ würde nur ein bisschen mehr Arbeit benötigen. – wvd

+0

Die meisten einer funktionierenden Implementierung ist hier https://github.com/mrpi/redis-cplusplus-client Siehe andere Kunden hier http://redis.io/clients –

2

+ 1 bis zur Nachrichtenübergabe, insbesondere wenn die Bibliothek die Zustellung zurückstellt, wenn der Empfänger nicht verfügbar ist. Wenn Sie sich für die Verwendung von Messaging entscheiden, müssen Sie ein Messaging-Protokoll definieren. Eine gute Wahl ist Representational State Transfer (ReST), die trotz ihres Namens ein zustandsloses, nachrichtenbasiertes Interaktionsprotokoll ist, das auf HTTP basiert. Es erfordert eine extrem sorgfältige API-Definition, was an und für sich eine sehr gute Sache ist.

Hoffe, dass dies hilft.

+0

Ich benutze ReST ausgiebig, aber ich bin auf der Suche nach etwas das macht es ein bisschen einfacher zu prototypieren. Vielleicht sollte ich den "Prototyp" als Voraussetzung hinzufügen. Guter Vorschlag sowieso. –

2

Es gibt viele Möglichkeiten, aber sie teilt sich in drei Hauptoptionen:

  1. Verwenden Sie irgendeine Art von zentralen Kommunikationsknoten (Message Queue, Schlüsselwertspeicher, vielleicht Datenbank);
  2. Plattformübergreifende verteilte Objekttechnologie (wie CORBA);
  3. HTTP, was auch immer Web-Services-Ansatz Sie mögen (obwohl die meisten Menschen nicht von der Enterprise Borg wie erholsame Webdienste der verschiedenen Arten), direkt zwischen den Komponenten.

Ich würde 2 ignorieren (es erweist sich nie so einfach).

Zu 1, beachten Sie, dass Datenbanken im Allgemeinen nicht als gefälschte Message-Passing-Plattform verwendet werden sollten. Verwenden Sie dies nur, wenn es wirklich nur um das Speichern von Datensätzen geht. Beachten Sie auch, dass http://redis.io ein AND-Schlüsselwertspeicher für Nachrichtenwarteschlangen ist.

+1

+1 für Enterprise Borg! – Landei

+0

@Marcin Danke für die Aufteilung in drei Hauptwege. So zu denken macht es viel einfacher, über das Problem nachzudenken. –

+0

@AlexandreMartins Kein Problem. – Marcin

Verwandte Themen