Frage

Ich suche nach Anregungen zu möglichen IPC-Mechanismen, die sind:

  • Cross-Plattform (Win32 und Linux mindestens)
  • Einfache Implementierung in C ++ sowie die am häufigsten Skriptsprachen (Perl, Ruby, Python, etc.).
  • Schließlich einfach zu bedienen von einer Programmier Sicht!

Was sind meine Optionen? Ich programmiere unter Linux, aber ich mag, was ich andere OSes in Zukunft tragbar sein schreiben. Ich habe darüber nachgedacht, mit Steckdosen, Named Pipes oder so etwas wie DBus.

War es hilfreich?

Lösung

In Bezug auf Geschwindigkeit, der beste Cross-Plattform-IPC-Mechanismus wird Rohre sein. Das geht jedoch davon aus, dass Sie Cross-Plattform-IPC auf der gleichen Maschine wollen. Wenn Sie in der Lage sein wollen Prozesse auf entfernten Rechnern zu sprechen, werden Sie bei Verwendung von Steckdosen statt suchen. Zum Glück, wenn Sie über TCP sprechen sind zumindest, Steckdosen und Leitungen verhalten sich so ziemlich das gleiche Verhalten. Während die APIs für sie auf Einstellung und zuschaltet verschieden sind, sie beide wirken wie Datenströme.

Der schwierige Teil ist jedoch nicht der Kommunikationskanal, aber die Nachrichten übergeben Sie darüber hinweg. Sie wollen wirklich etwas zu sehen, die für Sie Überprüfung und Analyse durchführen wird. Ich empfehlen, sich bei Google Protocol Buffers . Sie legen im Grunde eine spec-Datei, die Sie das Objekt zwischen Prozessen übergeben mögen beschreibt, und es gibt einen Compiler, den Code in einer Reihe von verschiedenen Sprachen zum Lesen und Schreiben von Objekten erzeugt, die die Spezifikation entsprechen. Es ist viel einfacher (und weniger Fehler anfällig) als zu versuchen, mit einem Messaging-Protokoll zu kommen und sie selbst Parser.

Andere Tipps

Für C ++, IPC steigern.
Sie können sich wahrscheinlich erstellen oder einige Bindungen für die Skriptsprachen sowie finden.

Ansonsten, wenn es wirklich wichtig ist in der Lage seiner Wette Schnittstelle mit Skriptsprachen des besten ist einfach zu verwenden, um Dateien, Rohre oder Steckdosen oder sogar eine höhere Abstraktion wie HTTP.

Warum nicht D-Bus? Es ist ein sehr einfaches Message-Passing-System, das auf fast allen Plattformen läuft und ist auf Robustheit ausgelegt. Es ist von so ziemlich jeder Skriptsprache an dieser Stelle unterstützt.

http://freedesktop.org/wiki/Software/dbus

Sie möchten vielleicht YAMI , um zu versuchen, es ist sehr einfach, aber funktional , tragbar und kommt zu einigen Sprachen

mit Bindung

Wenn Sie einen tragbaren, einfach zu bedienen, mehrsprachige und LGPL ed Lösung, ich würde Sie ZeroMQ :

  • Erstaunlich schnell, fast linear skalierbar und immer noch einfach.
  • Geeignet für einfache und komplexe Systeme / Architekturen.
  • Sehr leistungsfähige Kommunikationsmuster zur Verfügung:. REP-REP, PUSH-PULL, PUB-SUB, PAIR-PAIR
  • Sie können das Transportprotokoll konfigurieren, um es effizienter, wenn Sie Nachrichten zwischen Threads ( inproc:// ), Prozesse ( ipc:// ) oder Maschinen ( sind vorbei {tcp|pgm|epgm}:// ), mit einer Smart-Option einen Teil des Protokoll-Overhead bei Verbindungen abrasieren läuft zwischen virtuellen Maschinen von VMware ( vmci:// ).

Für die Serialisierung würde ich vorschlagen, Message oder Protocol Buffers (die anderen bereits auch erwähnt haben), je nach Ihren Bedürfnissen.

Wie wäre es Facebook Thrift ?

  

Thrift ist eine Software-Framework für skalierbare sprachübergreifende Dienste Entwicklung. Es kombiniert einen Software-Stack mit einem Code-Generierung Motor Dienste aufzubauen, die effizient und nahtlos zwischen C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, Smalltalk arbeiten und OCaml.

Ich glaube, Sie etwas auf Sockel basieren wollen werden.

Wenn Sie RPC wollen, anstatt nur IPC würde ich so etwas wie XML RPC / SOAP vorschlagen, die über HTTP läuft, und kann von jeder beliebigen Sprache verwendet werden.

YAMI -. Noch eine Messaging-Infrastruktur ein leichtes Messaging und Netzwerk-Rahmen

Wenn Sie bereit sind, etwas zu versuchen, ein wenig anders, da ist die ICE Plattform von ZeroC . Es ist Open Source und wird so ziemlich jedes Betriebssystem unterstützt auf die Sie sich vorstellen können, sowie mit Sprachunterstützung für C ++, C #, Java, Ruby, Python und PHP. Schließlich ist es sehr einfach (die Sprachzuordnungen zugeschnitten sind natürlich in jede Sprache passen) zu fahren. Es ist auch schnell und effizient. Es gibt sogar eine abgespeckte Version für Geräte.

kann ich vorschlagen, dass Sie die plibsys C-Bibliothek. Es ist sehr einfach, leicht und Cross-Plattform. Veröffentlicht unter der LGPL. Es sieht vor:

  • genannt systemweite gemeinsame Speicherbereiche (System V, POSIX und Windows-Implementierungen);
  • genannt systemweite Semaphore für den Zugriff Synchronisation (System V, POSIX und Windows-Implementierungen);
  • genannt systemweiten Shared-Buffer-Implementierung basiert auf dem gemeinsam genutzten Speicher und Semaphore;
  • Steckdosen (TCP, UDP, SCTP) mit IPv4 und IPv6-Unterstützung (UNIX und Windows-Implementierungen).

Es ist leicht, Bibliothek mit ziemlich guter Dokumentation zu verwenden. Wie es in C geschrieben ist, können Sie leicht Bindungen von Skriptsprachen machen.

Wenn Sie große Datenmengen zwischen Prozessen übergeben müssen (vor allem, wenn die Geschwindigkeit wesentlich ist) es besser ist, gemeinsam genutzten Speicher zu verwenden, um die Daten selbst und Steckdosen zu passieren, ein Verfahren zu benachrichtigen, dass die Daten bereit sind. Sie können es wie folgt vor:

  • legt ein Prozess die Daten in ein Speichersegment geteilt und sendet eine Benachrichtigung über eine Steckdose an einem anderen Prozess; als eine Benachrichtigung in der Regel sehr klein ist der Zeitaufwand ist minimal;
  • empfängt ein anderer Prozess die Meldung und liest die Daten aus dem gemeinsam benutzten Speichersegment; nach, dass es eine Benachrichtigung sendet, dass die Daten auf den ersten Prozess verlesen wurden wieder so kann es mehr Daten füttern.

Dieser Ansatz kann in einer plattformübergreifende Art und Weise umgesetzt werden.

Distributed Computing ist in der Regel komplex und Sie sind gut zu verwenden, vorhandene Bibliotheken oder Frameworks empfohlen, statt das Rad neu zu erfinden. Zurück Plakat haben bereits ein paar dieser Bibliotheken und Frameworks aufgezählt. Je nach Bedarf können Sie entweder ein sehr niedriges Niveau (wie Steckdosen) oder hohe Niveau Rahmen (wie CORBA) wählen. Es kann keine allgemeine „verwendet diese“ Antwort sein. Sie müssen sich über verteilte Programmierung erziehen und dann wird es viel einfacher, die richtige Bibliothek oder Rahmen für den Job zu wählen.

Es gibt eine wild verwendet C ++ Framework für Distributed Computing genannt ACE und dem CORBA ORB TAO (die bei der ACE buildt ist). Es gibt sehr gute Bücher über ACE http://www.cs.wustl.edu/~ schmidt / ACE / so dass Sie vielleicht einen Blick darauf werfen. Achten Sie darauf!

Es ist nicht einfacher zu bekommen als Rohre verwenden, die auf jedem Betriebssystem unterstützt werden, ich kenne, und kann in so ziemlich jede Sprache abgerufen werden.

Check out diese Tutorial.

TCP-Sockets auf localhost FTW.

Python hat eine ziemlich gute IPC-Bibliothek: siehe https://docs.python.org/2/library/ipc.html

Xojo verfügt über eine integrierte plattformübergreifende IPC Unterstützung mit seinem IPCSocket Klasse . Obwohl man konnte natürlich nicht „implementieren“ es in anderen Sprachen, können Sie es in einer Xojo Konsolenanwendung verwenden könnten und es von anderen Sprachen rufen vielleicht sehr einfach für Sie, diese Option zu machen.

Google protobufs sind eine wirklich schlechte Idee mit Ihnen leicht pflegen wollen und Debug-Code. es ist zu einfach für die Menschen zu missbrauchen und es verwenden, um Ihren Code zu verschmutzen. Die Proto-Dateien sind schön, aber es ist im Grunde die gleiche Sache wie eine Struktur-Header-Datei und der Code generiert es ist kompletter Mist macht man sich fragen, ob es sich um eine verdeckte Angriff Werkzeug zu sabotieren Software-Projekte wirklich, anstatt sie zu automatisieren. Nachdem Sie es für eine Weile seine fast unmöglich, um es aus dem Code zu entfernen. Sie sind besser dran, nur eine Header-Datei von fix Formatstrukturen verwenden, die leicht ausgetestet werden.

Wenn Sie wirklich brauchen, Kompression, wechseln Sie zu einer Adresse / Daten-Mapping von Ablagestrukturen der Ferne ... dann Pakete sind nur ein Bündel von Adress- / Datenpaaren ... auch eine Struktur, die sehr einfach mit Ihrem eigenen Perl-Skripte zu automatisieren, den Code erzeugen, der für Menschen lesbarer und debugable

ist
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top