Auf dieser Seite

Prozessübergreifende Kommunikation in Qt

Qt bietet verschiedene Möglichkeiten, die Interprozesskommunikation (IPC) in Anwendungen zu implementieren. Die IPC-Funktionalität in Qt umfasst:

  • Synchronisierung von Prozessen und gemeinsame Nutzung von Ressourcen
  • Austausch von Daten auf Byte-Ebene lokal oder über ein Netzwerk
  • Gemeinsame Nutzung replizierter Qt-Objekte zwischen Prozessen oder Systemen
  • Übertragung strukturierter Nachrichten oder Remote-Procedure-Calls (RPC)
  • Verwendung von M2M-Industriestandardprotokollen für IoT- und industrielle Systeme

Viele der IPC-Mechanismen sind für vernetzte Geräte vorgesehen und nutzen Netzwerkprotokolle wie TCP, UDP und HTTP. Die Übersicht „Netzwerk und Konnektivität“ behandelt das Thema Netzwerk im Detail.

Qt unterstützt strukturierte Datenformate wie JSON, XML, Protobuf und CBOR. Weitere Informationen zu strukturierten Daten finden Sie auf den Übersichtsseiten zu Datenverarbeitung und E/A.

Synchronisierung von Prozessen und gemeinsame Nutzung von Ressourcen

Für Prozesse, die lokale Ressourcen gemeinsam nutzen, oder Systeme, die Aktionen und Daten synchronisieren, können Sie System-Semaphoren und Shared Memory verwenden. Diese Funktionen sind Teil des Qt Core Moduls.

Qt stellt Klassen für die Synchronisation zwischen Prozessen bereit, darunter „ QSystemSemaphore “. Ähnlich wie bei „ QSemaphore “ ist darauf von mehreren Prozessen auf demselben System zugegriffen werden kann. Es wird global durch einen Schlüssel identifiziert, der in Qt durch die Klasse „ QNativeIpcKey “ dargestellt wird. Darüber hinaus unterstützt Qt je nach Betriebssystem möglicherweise mehrere verschiedene Backends für die gemeinsame Nutzung von Speicher.

Eine ausführliche Erläuterung finden Sie auf den folgenden Seiten:

Gemeinsamer Speicher

Die plattformübergreifende Shared-Memory-Klasse ` QSharedMemory` bietet Zugriff auf die Shared-Memory-Implementierung des Betriebssystems. Sie ermöglicht den sicheren Zugriff mehrerer Threads und Prozesse auf Shared-Memory-Segmente. Darüber hinaus steuert ` QSystemSemaphore ` den Zugriff auf vom System gemeinsam genutzte Ressourcen und ermöglicht die Kommunikation zwischen Prozessen.

Erstellen von untergeordneten Prozessen

Die Klasse ` QProcess ` kann externe Programme als untergeordnete Prozesse starten und mit ihnen kommunizieren. Sie bietet eine API zur Überwachung und Steuerung des Zustands des untergeordneten Prozesses. ` QProcess ` ermöglicht den Zugriff auf die Ein- und Ausgabekanäle des untergeordneten Prozesses, indem es von ` QIODevice` erbt.

Gemeinsame Nutzung von Qt-Objekten zwischen entfernten Prozessen oder Systemen

Das Qt Remote Objects Modul bietet einen Remote-Objekt-Mechanismus, der es Geräten und Prozessen ermöglicht, Qt-Objekte gemeinsam zu nutzen. Es verwendet ein „Source“-Objekt, das über einen zwischengeschalteten „Node“ mit „Replica“-Objekten synchronisiert wird. Diese „Replicas“ sind im Wesentlichen Proxys, die die Eigenschaften, Signale und Slots des „Source“-Objekts spiegeln, sodass entfernte Prozesse mit dem Objekt interagieren können, ohne direkte Kenntnis des Netzwerktransports zu haben.

Senden von Nachrichten mit Remote Procedure Calls (RPC)

Remote Procedure Call (RPC) ist ein hochrangiger Mechanismus, der die zugrunde liegende Netzwerkkommunikation abstrahiert. Mit RPC kann ein Client Funktionen aufrufen, die auf einem Remote-Server ausgeführt werden, als wären es lokale Funktionsaufrufe. Mehrere Sprachen bieten Unterstützung für RPC-Technologien, was die Implementierung in komplexen Systemen vereinfacht, die mehrere Programmiersprachen verwenden.

Das Qt GRPC Modul implementiert Remote Procedure Calls (RPC) unter Verwendung des gRPC-Protokolls. gRPC ist ein weit verbreitetes Framework zum Senden von Nachrichten im serialisierten Format, wobei meist HTTP/2 für eine effiziente Netzwerkkommunikation genutzt wird. gRPC eignet sich besonders gut für die Kommunikation in modularen Microservices und Anwendungen mit geringer Latenz, wie beispielsweise Chat- und Streaming-Plattformen.

Verwendung von M2M-Industriestandardprotokollen

Machine-to-Machine-Protokolle (M2M) sind speziell für Systeme konzipiert, die strengen Ressourcenbeschränkungen unterliegen, wie beispielsweise Sensoren und Automatisierungssysteme. Oft sind sie branchenspezifisch und auf Anwendungsfälle wie Fertigung, Gesundheitswesen und Umweltüberwachung zugeschnitten. Diese Systeme zeichnen sich häufig durch geringen Stromverbrauch und begrenzte Rechenleistung aus.

Das Qt MQTT Modul stellt Qt-Anwendungen MQTT-Funktionalität zur Verfügung. MQTT ist ein Protokoll, das das „Publish-and-Subscribe“-Muster nutzt, um Informationen innerhalb eines Systems zu versenden. In einem MQTT-System verwaltet ein Broker das Senden und Empfangen an Clients. Clients können Publisher, Subscriber oder beides sein. MQTT eignet sich besonders für Umgebungen mit geringer Bandbreite und hoher Latenz, wie sie beispielsweise in Industrie- und Fertigungssystemen vorkommen.

Das Qt CoAP Modul stellt Qt-Anwendungen das Constrained Application Protocol (CoAP) zur Verfügung. CoAP ist ein Protokoll, das UDP und RESTful-Prinzipien nutzt, um Informationen innerhalb von Systemen mit eingeschränkten Ressourcen zu übertragen. CoAP wurde speziell entwickelt, um die Vorteile kompakter Datagramm-Nachrichten und eines geringen Overheads zu nutzen.

Das Qt OPC UA Modul stellt Qt-Anwendungen OPC UA zur Verfügung. Es nutzt einen Client- und Server-IPC-Mechanismus für industrielle Systeme. OPC UA ist für komplexe Systeme vorgesehen und verfügt über integrierte Sicherheitsmaßnahmen.

Sie können Hybridsysteme mit MQTT, CoAP und OPC UA implementieren. So können Sie beispielsweise die Cloud-Kommunikation über MQTT, das Hauptsystem über OPC UA realisieren und die einzelnen Sensoren und Geräte über CoAP verbinden.

Ein Protokoll kann in einer bestimmten Branche und ihrem Entwicklungsökosystem weit verbreitet sein. Auch die Systemarchitektur und die Nachrichten sind unterschiedlich aufgebaut. Beispielsweise nutzt MQTT hauptsächlich TCP, während CoAP UDP verwendet. Folglich kann MQTT TLS und CoAP DTLS für sichere Übertragungen nutzen.

Verwendung des D-Bus-Protokolls

Das Qt D-Bus Modul ist eine ausschließlich für Unix bestimmte Bibliothek, mit der Sie IPC über das Qt D-Bus-Protokoll implementieren können. Es erweitert den Signals-and-Slots-Mechanismus von Qt auf die IPC-Ebene und ermöglicht es, ein von einem Prozess ausgesendetes Signal mit einem Slot in einem anderen Prozess zu verbinden.

Verwendung von Sitzungen in Anwendungen

Unter Linux/X11, Windows und macOS bietet Qt Unterstützung für die Sitzungsverwaltung. Sitzungen ermöglichen die Weitergabe von Ereignissen an Prozesse, beispielsweise um zu benachrichtigen, wenn ein Herunterfahren erfolgt. Die Prozesse und Anwendungen können dann alle erforderlichen Vorgänge ausführen, wie zum Beispiel das Speichern geöffneter Dokumente. Weitere Informationen finden Sie auf der Seite zur Sitzungsverwaltung.

Sicherheitsaspekte bei der IPC

Da Daten zwischen Prozessen oder Systemen übertragen werden, müssen Sie Datenschutz- und Sicherheitsaspekte berücksichtigen. Angreifer können Daten innerhalb von Netzwerken abfangen, und fremde Prozesse können Daten innerhalb eines Systems überwachen.

Hier sind einige Sicherheitsmaßnahmen, die Sie umsetzen können:

  • Verwenden Sie Verschlüsselung beim Senden oder Empfangen von Daten. Siehe „Secure Sockets Layer (SSL)-Klassen“.
  • Verwenden Sie starke Authentifizierungs- und Autorisierungsmechanismen. Siehe „Qt Network -Autorisierung“.
  • Überprüfen und verarbeiten Sie nicht vertrauenswürdige Daten. Siehe „Umgang mit nicht vertrauenswürdigen Daten“.
  • Legen Sie Ratenbegrenzungen fest und überwachen Sie den Datenverkehr, um Missbrauch zu verhindern.
  • Setzen Sie Salting- oder Nonce-Techniken ein, um sich vor Überwachungs- und Replay-Angriffen zu schützen.
  • Aktualisieren Sie Ihre Umgebung, um Sicherheitslücken zu beheben.

Auf der Seite „Sicherheit in Qt“ werden die Sicherheitsrichtlinien und -maßnahmen von Qt erläutert. Qt-Module können unterschiedliche Protokolle implementieren und erfordern daher unter Umständen zusätzliche Sicherheitsüberlegungen.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.