Sur cette page

Qt Remote Objects Réplique

Une réplique compilée est un type basé sur QRemoteObjectReplica, où la définition de la classe dérivée est automatiquement générée par le compilateur repc. Lorsque vous utilisez des fonctions CMake ou des variables qmake pour lancer le compilateur repc, la génération fait partie du processus de construction. Bien que seul un en-tête soit généré, il s'agit d'un type complet. Il n'y a pas de constructeur public, vous devez donc utiliser la fonction modèle QRemoteObjectNode::acquire pour créer l'instance Replica.

Un QRemoteObjectDynamicReplica peut être généré au moment de l'exécution. Pour ce faire, vous appelez QRemoteObjectNode::acquireDynamic(), en passant le nom de la source (a QString) comme argument. Les répliques dynamiques sont un peu plus compliquées à utiliser en C++, mais elles ne nécessitent pas de compilation. Les répliques dynamiques ne prennent pas en charge les valeurs initiales des propriétés, ni l'introspection tant qu'elles n'ont pas été initialisées.

Une différence importante entre ces deux façons de créer des répliques est le comportement avant l'initialisation de la réplique. Étant donné qu'une réplique dynamique n'obtient un metaObject qu'après l'initialisation, elle n'a pratiquement pas d'API avant l'initialisation - pas de propriétés, ni de signaux auxquels connecter des slots.

Les métaObjets des répliques compilées étant créés à la compilation, leur API est disponible lorsque la réplique est instanciée. Vous pouvez même fournir des valeurs par défaut pour les propriétés dans le fichier modèle, qui sont utilisées jusqu'à ce que la réplique soit initialisée avec les valeurs actuelles de la source.

Initialisation du réplica

Un nœud hôte partage la liste des sources qu'il héberge avec tous les autres nœuds qui s'y connectent. Cet hôte envoie des mises à jour lorsque des sources sont ajoutées à la liste ou en sont retirées. De cette manière, un nœud connecté saura toujours à quelles sources il peut s'attacher. Les modifications apportées à une source spécifique ne sont propagées qu'aux nœuds qui possèdent une réplique de cette source. Cela permet d'éviter tout trafic réseau inutile.

Lorsqu'un nœud acquiert une réplique d'une source connue, il envoie une demande pour cette source au nœud hôte. À la réception de cette demande, l'hôte crée un paquet de réponses contenant les valeurs actuelles de toutes les propriétés de cette source. Si la réplique demandée est dynamic, le paquet de réponses inclut la définition de l'API pour la source. Dès lors, le nœud du réplica sera inclus dans la liste des connexions qui reçoivent des modifications de cette source.

Si une réplique est instanciée mais que son nœud n'est pas connecté au nœud qui héberge la source demandée - ou que cet objet vit dans un processus de nœud hôte, mais que le partage/remoting n'a pas été activé pour le site QObject - la réplique sera quand même créée, mais restera non initialisée.

Si, ultérieurement, le nœud de la réplique est informé que la source demandée est disponible auprès d'un nœud connecté, il demandera alors la source et lancera le processus d'initialisation.

Si la connexion à un nœud hôte est perdue, la réplique passe à l'état invalide. Elle tentera de se reconnecter et se réinitialisera si la connexion est rétablie ; cela permet de s'assurer que toutes les propriétés sont à jour.

Propriété de la réplique

Les méthodes d'acquisition renvoient un pointeur sur la réplique QObject instanciée par le nœud. Le nœud n'a aucun moyen de connaître la durée de vie prévue de la réplique. Par conséquent, lorsque la réplique n'est plus nécessaire, il incombe au programme appelant de la supprimer.

Vous pouvez instancier plusieurs copies de la même réplique. Toutes les répliques d'une même source provenant d'un seul nœud partagent un membre de données privé qui gère la communication réseau. Cela signifie que les instances multiples d'une réplique n'introduisent pas de trafic réseau supplémentaire, bien qu'il y ait des frais généraux de traitement supplémentaires. Si les répliques ne sont pas supprimées, le nombre de références de cet objet privé n'atteindra pas 0 et la communication réseau sera inutile jusqu'à ce que le processus appelant se termine. Pour cette raison, il est recommandé d'utiliser QScopedPointer ou QSharedPointer pour aider à suivre la durée de vie des répliques.

© 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.