Qt Remote Objects Knotenpunkte
In einem QtRO-Netzwerk werden Informationen zwischen Prozessen über QRemoteObjectNodes ("Nodes") weitergegeben. Diese Peer-to-Peer-Funktionalität verwendet eine kleine Anzahl verschiedener Pakete, die die notwendigen Daten zwischen den Knoten weiterleiten.
Jeder Prozess, der am Netzwerk teilnimmt, instanziiert einen Knoten-basierten Typ, wie QRemoteObjectNode, QRemoteObjectHost oder QRemoteObjectRegistryHost. Die Host-Typen von Knoten bieten zusätzliche Funktionen. Sowohl QRemoteObjectHost als auch QRemoteObjectRegistryHost unterstützen die Methoden enableRemoting() und die entsprechende Methode disableRemoting(), die die wichtigsten Methoden sind, um Quellobjekte dem Netzwerk zugänglich zu machen. Um die Registry-Funktionalität nutzen zu können, müssen Sie einen QRemoteObjectRegistryHost im Netzwerk haben. Dann können alle anderen Knoten die URL des RegistryHosts an den registryAddress
Konstruktorparameter des Knotens übergeben oder die URL an die setRegistryUrl() Methode weitergeben.
Da QtRO ein Peer-to-Peer-Netzwerk ist, muss der Knoten der Replik mit dem Knoten verbunden sein, der die Quelle hostet, um acquire() eine gültige Replik zu erstellen. Ein Host-Knoten ist ein Knoten, der anderen Knoten erlaubt, sich mit ihm zu verbinden, was dadurch erreicht wird, dass Hosts eindeutige Adressen erhalten. Diese Adresse wird dem QRemoteObjectHost Konstruktor zur Verfügung gestellt oder durch die setHostUrl Methode gesetzt. Der Knoten, von dem eine Replik angefordert wird, muss die Verbindung zum Host-Knoten herstellen, um die Replik zu initialisieren und auf dem neuesten Stand zu halten.
Verbinden von Knoten mit QtRO-URLs
Host Nodes verwenden benutzerdefinierte URLs, um Verbindungen zu vereinfachen. Derzeit unterstützt QtRO zwei Arten von Verbindungen:
- Eine TCP-Verbindung unter Verwendung des Standard-TCP/IP-Protokolls - unterstützt Verbindungen zwischen Geräten sowie zwischen Prozessen auf demselben Gerät.
- Eine lokale Verbindung - unterstützt Verbindungen zwischen Prozessen auf demselben Gerät. Diese Art von Verbindung kann je nach den Eigenschaften des zugrunde liegenden Betriebssystems einen geringeren Overhead aufweisen.
Für lokale Verbindungen müssen Sie einen eindeutigen Namen verwenden. Für TCP-Verbindungen müssen Sie eine eindeutige Kombination aus Adresse und Portnummer angeben.
Derzeit enthält QtRO keine zeroconf-Funktion. Daher müssen alle Prozesse oder Geräte im Voraus wissen, wie sie sich miteinander verbinden können. Ein QRemoteObjectRegistry kann verwendet werden, um den Verbindungsprozess für ein Netzwerk mit mehreren Host Nodes zu vereinfachen.
In der folgenden Tabelle sind die verfügbaren Verbindungstypen zusammengefasst:
URL | Hinweise |
---|---|
("local:service") | Verwendet (intern) die Klassen {QLocalServer}/{QLocalSocket} zur Kommunikation zwischen Knoten. |
("tcp://192.168.1.1:9999") | Verwendet (intern) {QTcpServer}/{QTcpSocket} Klassen für die Kommunikation zwischen Knoten. |
("qnx:service") | Nur QNX OS. Verwendet einen benutzerdefinierten (benannten) Kanal für die native Kommunikation zwischen Knoten. |
("localabstract:service") | Seit 6.2. Nur Linux/Android-Betriebssysteme. Verwendet einen abstrakten Namespace für Unix-Domain-Sockets. Dies ermöglicht das QLocalSocket Verhalten auf nicht beschreibbaren Geräten zu funktionieren. |
Knoten haben einige enableRemoting()-Methoden, die zur Freigabe von Objekten im Netzwerk verwendet werden. Wenn der Knoten jedoch kein Host-Knoten ist, wird ein Fehler zurückgegeben.
Andere Prozesse oder Geräte, die mit einem gemeinsam genutzten Objekt interagieren wollen, können eine der node's acquire() Methoden verwenden, um ein Replikat zu instanziieren.
© 2025 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.