In Bezug auf die Geschwindigkeit sind Rohre der beste plattformübergreifende IPC-Mechanismus. Dies setzt jedoch voraus, dass Sie einen plattformübergreifenden IPC auf demselben Computer wünschen. Wenn Sie mit Prozessen auf Remotecomputern kommunizieren möchten, sollten Sie stattdessen Sockets verwenden. Glücklicherweise verhalten sich Sockets und Pipes, wenn Sie zumindest über TCP sprechen, ziemlich ähnlich. Während die APIs zum Einrichten und Verbinden unterschiedlich sind, verhalten sich beide nur wie Datenströme.
Der schwierige Teil ist jedoch nicht der Kommunikationskanal, sondern die Nachrichten, die Sie über ihn leiten. Sie möchten sich wirklich etwas ansehen, das für Sie eine Überprüfung und Analyse durchführt. Ich empfehle, sich die Protokollpuffer von Google anzusehen . Grundsätzlich erstellen Sie eine Spezifikationsdatei, die das Objekt beschreibt, das Sie zwischen Prozessen übergeben möchten, und es gibt einen Compiler, der Code in verschiedenen Sprachen zum Lesen und Schreiben von Objekten generiert, die der Spezifikation entsprechen. Es ist viel einfacher (und weniger fehleranfällig) als ein Messaging-Protokoll zu erstellen und selbst zu analysieren.
Informationen zu C ++ finden Sie unter Boost IPC .
Sie können wahrscheinlich auch einige Bindungen für die Skriptsprachen erstellen oder finden.
Wenn es wirklich wichtig ist, mit Skriptsprachen kommunizieren zu können, verwenden Sie am besten einfach Dateien, Pipes oder Sockets oder sogar eine übergeordnete Abstraktion wie HTTP.
quelle
Warum nicht D-Bus? Es ist ein sehr einfaches Nachrichtenübermittlungssystem, das auf fast allen Plattformen ausgeführt wird und auf Robustheit ausgelegt ist. Es wird zu diesem Zeitpunkt von so ziemlich jeder Skriptsprache unterstützt.
http://freedesktop.org/wiki/Software/dbus
quelle
Wenn Sie eine tragbare, benutzerfreundliche, mehrsprachige und LGPL- Lösung suchen , würde ich Ihnen ZeroMQ empfehlen :
inproc://
), Prozessen (ipc://
) oder Maschinen ({tcp|pgm|epgm}://
) übergeben. Mit einer intelligenten Option können Sie einen Teil des Protokoll-Overheads sparen, wenn Verbindungen zwischen VMware ausgeführt werden virtuelle Maschinen (vmci://
).Für die Serialisierung würde ich je nach Bedarf MessagePack- oder Protokollpuffer (die bereits von anderen erwähnt wurden) vorschlagen .
quelle
Vielleicht möchten Sie YAMI ausprobieren , es ist sehr einfach, aber funktional, portabel und mit einer Bindung an wenige Sprachen ausgestattet
quelle
Wie wäre es mit Facebooks Thrift ?
quelle
Ich denke, Sie wollen etwas, das auf Steckdosen basiert.
Wenn Sie RPC anstatt nur IPC möchten, würde ich etwas wie XML-RPC / SOAP vorschlagen, das über HTTP ausgeführt wird und in jeder Sprache verwendet werden kann.
quelle
YAMI - Eine weitere Messaging-Infrastruktur ist ein leichtes Messaging- und Netzwerk-Framework.
quelle
Ich kann Ihnen vorschlagen, die plibsys C-Bibliothek zu verwenden. Es ist sehr einfach, leicht und plattformübergreifend. Veröffentlicht unter der LGPL. Es bietet:
Es ist einfach, eine Bibliothek mit einer recht guten Dokumentation zu verwenden. Da es in C geschrieben ist, können Sie problemlos Bindungen aus Skriptsprachen erstellen.
Wenn Sie große Datenmengen zwischen Prozessen übergeben müssen (insbesondere wenn Geschwindigkeit wichtig ist), ist es besser, gemeinsam genutzten Speicher zu verwenden, um die Daten selbst und Sockets zu übergeben, um einen Prozess zu benachrichtigen, dass die Daten bereit sind. Sie können es wie folgt machen:
Dieser Ansatz kann plattformübergreifend implementiert werden.
quelle
Wenn Sie bereit sind, etwas anderes auszuprobieren, gibt es die ICE- Plattform von ZeroC . Es ist Open Source und wird auf nahezu jedem denkbaren Betriebssystem unterstützt. Außerdem bietet es Sprachunterstützung für C ++, C #, Java, Ruby, Python und PHP. Schließlich ist es sehr einfach zu fahren (die Sprachzuordnungen sind so zugeschnitten, dass sie natürlich in jede Sprache passen). Es ist auch schnell und effizient. Es gibt sogar eine abgespeckte Version für Geräte.
quelle
Distributed Computing ist normalerweise komplex und es wird empfohlen, vorhandene Bibliotheken oder Frameworks zu verwenden, anstatt das Rad neu zu erfinden. Das vorherige Poster hat bereits einige dieser Bibliotheken und Frameworks aufgelistet. Abhängig von Ihren Anforderungen können Sie entweder ein sehr niedriges Level (wie Sockets) oder ein High-Level-Framework (wie CORBA) auswählen. Es kann keine generische "benutze diese" Antwort geben. Sie müssen sich über verteilte Programmierung informieren und finden es dann viel einfacher, die richtige Bibliothek oder das richtige Framework für den Job auszuwählen.
Es gibt ein häufig verwendetes C ++ - Framework für verteiltes Rechnen namens ACE und das CORBA ORB TAO (das auf ACE aufbaut). Es gibt sehr gute Bücher über ACE http://www.cs.wustl.edu/~schmidt/ACE/, also schauen Sie mal rein. Pass auf!
quelle
Einfacher geht es nicht als mit Pipes, die von jedem mir bekannten Betriebssystem unterstützt werden und auf die in nahezu jeder Sprache zugegriffen werden kann.
Schauen Sie sich dieses Tutorial an.
quelle
TCP-Sockets an localhost FTW.
quelle
Python hat eine ziemlich gute IPC-Bibliothek: siehe https://docs.python.org/2/library/ipc.html
quelle
Xojo verfügt mit seiner IPCSocket-Klasse über eine integrierte plattformübergreifende IPC-Unterstützung . Obwohl Sie es offensichtlich nicht in anderen Sprachen "implementieren" konnten, können Sie es in einer Xojo-Konsolen-App verwenden und aus anderen Sprachen aufrufen, was diese Option für Sie möglicherweise sehr einfach macht.
quelle
In der heutigen Zeit gibt es eine sehr einfache, C ++ 1x-kompatible, gut dokumentierte, Linux- und Windows-kompatible Open-Source-Bibliothek "CommonAPI": CommonAPI C ++ .
Das zugrunde liegende IPC-System ist D-Bus (libdbus) oder SomeIP, wenn Sie dies wünschen. Anwendungsschnittstellen werden mit einer einfachen und auf diese Franca IDL-Sprache zugeschnittenen Sprache angegeben.
quelle