Frage

Ich habe noch nie irgendeine IPC C ++ unter Linux geschrieben.

Mein Problem ist, dass ich mehrere Clients (Schriftsteller) und ein einzelner Server (Leser) haben werde. All dies wird auf der gleichen Maschine sein. Die Autoren werden Stücke von Daten (ein String / Struktur) an den Leser liefern. Der Leser wird sie dann in FIFO lesen und etwas mit ihnen.

Die Typen von IPC auf Linux sind entweder Pipes oder Sockets / Message Queues, soweit ich das beurteilen kann.

Ich habe mich nur gefragt, wenn mir jemand einen Weg nach unten zu gehen, empfehlen könnte. Ich bin Neigung in Richtung Steckdosen, aber ich habe keine wirkliche Grundlage. Gibt es etwas, was ich lesen soll / verstehen, bevor auf dieser Reise einsteigen?

Danke

War es hilfreich?

Lösung

Das Hauptproblem man beachten sollte, ist, welche Art von Daten, die Sie wie dies im Teil sind, indem Sie Ihre Optionen bestimmen. Das kommt darauf an, ob Ihre Daten begrenzt ist oder nicht. Wenn es nicht begrenzt ist, dann orientiert etwas Strom wie FIFOs oder Steckdosen geeignet sind; wenn es dann könnten Sie besser nutzen Dinge wie MQs oder gemeinsam genutzten Speicher machen. Da Sie beide Saiten und structs erwähnen ist es schwer zu sagen, was in Ihrem Fall angemessen ist, aber wenn die Saiten innerhalb einer vernünftigen Maximum begrenzt sind Sie etwas mit einigen kleineren Hantieren verwenden können.

Die zweite ist die Geschwindigkeit. Es gibt nie eine völlig richtige Antwort für diese aber in der Regel geht es so etwas wie:. Shared Memory, MQs, FIFOs, Domain-Sockets, Netzwerk-Sockets

Die dritte ist die Benutzerfreundlichkeit. Shared-Memory ist der größte PITA da müssen Sie Ihre eigene Synchronisierung behandeln. Die Rohre sind so lange einfach als Nachrichtenlängen unter PIPE_BUF Größe bleiben. Das Betriebssystem übernimmt die meisten Ihrer Kopfschmerzen mit MQs. Sockets sind einfach genug, aber Sie haben das Setup vorformulierten.

Schließlich mehrere der IPC-Mechanismen haben sowohl POSIX und SYSV Varianten. Im Allgemeinen POSIX ist der Weg zu gehen, es sei denn die SYSV Art einige Features hat Sie wirklich brauchen oder wollen.

EDIT: Anzahl0 Antwort erinnert mich, dass Sie in etwas mehr abstrakt und höherer Ebene interessiert sein könnten. Neben ACE Sie unter Poco aussehen kann. Und natürlich beantworten nicht SO ist abgeschlossen, wenn es nicht

Andere Tipps

System V IPC ist etwas fummelig zu bedienen, aber es ist eine ausgereifte, robuste Technik. Nachrichtenwarteschlangen würde wahrscheinlich tun, was Sie wollen und unterstützen Atom-Queuing / de-Warteschlangen.

Sockel sind einfach zu bedienen und auch die Kommunikation über ein Netzwerk unterstützen. Aber sie alle Warteschlangen nicht tun, so würden Sie den Queue-Management-Code in Ihrem Server zu schreiben. Über Sockets mit C ++ ist nicht wesentlich anders mit ihnen mit C. Es gibt viele Anleitungen dazu im Netz und Bücher wie Stevens' ‚Unix Network Programming (Vol 1)‘, die dieses Thema in einer gewissen Tiefe abdecken.

Ein guter Ort, um Ihre Füße nass zu bekommen, ist dieses Buchsen Tutorial .

Sie werden dann müssen Knochen-up auf Themen & mutexes und < a href = "http://www.linuxselfhelp.com/HOWTO/C++Programming-HOWTO-18.html" rel = "nofollow noreferrer"> hier .

Mit der oben Sie sind alles Set spielen beginnen; -)

Auch wenn Sie noch nicht für Bücher gefragt, und weil die Antworten oben so gut sind, bin ich nur Sie gehen schlagen Sie Ihre Hände auf den Kopien dieser beiden Wälzer bekommen:

UNIX Network Programming, Band 2, zweite Auflage: Interprozesskommunikation, W. Richard Stevens

Programmierung für Fortgeschrittene in der UNIX-Umgebung, zweite Auflage, Richard Stevens und Stephen A. Rago

Es gibt unvermeidlich Ins & Outs mit dieser Art von Codierung, diese beiden Bücher werden Sie durch helfen, was auch immer Verwirrung auftreten.

Versuchen Sie einen Blick auf ACE (Adaptive Communication Environment) zu übernehmen . Die ACE-Bibliotheken sind frei verfügbar, sehr reif und Cross-Plattform. Leider ist eine gute Dokumentation nicht, ich würde empfehlen, dieses Buch für ein schauen gute Lösung. Sie könnten versuchen, einen Blick auf diesem Tutorial zu nehmen zu bekommen ein Gefühl der Muster (am Ende des Dokuments). ACE verwendet eine Reihe von Mustern sehr erfolgreich zu bewältigen und effizient mit diesen Problemen besonders in einem vernetzten Kontext, so sollte es ein guter Start in Spielraum für gute Muster und Methoden zu verwenden.

Besonders Ace_Task mit der Message_Queue erlauben zu tun, was Sie benötigen.

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