Qt Remote Objects Réplique
Une réplique compilée est un type basé sur QRemoteObjectReplica, dont la définition de classe dérivée est générée automatiquement par le compilateur repc. Lorsque vous utilisez les fonctions CMake ou les variables qmake pour exécuter le compilateur repc, cette génération fait partie intégrante du processus de compilation. Bien qu’un seul 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 de modèle ` QRemoteObjectNode::acquire ` pour créer l’instance `Replica`.
Une réplique dynamique ( QRemoteObjectDynamicReplica ) peut être générée lors de l’exécution. Pour ce faire, vous appelez ` QRemoteObjectNode::acquireDynamic()` en passant le nom de la source (un ` QString`) en argument. Les répliques dynamiques sont un peu plus fastidieuses à utiliser depuis le 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 méthodes de création de répliques réside dans leur comportement avant l’initialisation de la réplique. Étant donné qu’une réplique dynamique ne dispose d’un méta-objet qu’après son initialisation, elle ne possède pratiquement aucune API avant celle-ci : ni propriétés, ni signaux auxquels connecter des slots.
Les méta-objets des répliques compilées étant créés lors de la compilation, leur API est disponible dès l’instanciation de la réplique. Vous pouvez même fournir des valeurs par défaut pour les propriétés dans le fichier de modèle ; celles-ci sont utilisées jusqu’à ce que la réplique soit initialisée avec les valeurs actuelles provenant de la source.
Initialisation des répliques
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 ou supprimées de la liste. De cette manière, un nœud connecté sait toujours à quelles sources il peut se connecter. Les modifications apportées à une source spécifique ne sont propagées qu’aux nœuds disposant d’une réplique de cette source. Cela permet ainsi d’éviter tout trafic réseau inutile.
Lorsqu’un nœud acquiert une réplique d’une source connue, il envoie une requête concernant cette source au nœud hôte. À la réception de cette requête, l’hôte crée un paquet de réponse contenant les valeurs actuelles de toutes les propriétés de cette source. Si la réplique demandée est de typ dynamic, le paquet de réponse inclut la définition de l’API pour la source. Dès lors, le nœud de la réplique sera inclus dans la liste des connexions recevant les modifications apportées à cette source.
Si une réplique est instanciée mais que son nœud n’est pas connecté au nœud hébergeant la source demandée – ou si cet objet réside dans un processus du nœud hôte, mais que le partage/accès à distance n’a pas été activé pour l’ QObject – la réplique sera tout de 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 à partir d’un nœud connecté, il demandera alors la source et lancera le processus d’initialisation.
En cas de perte de connexion avec un nœud hôte, la réplique passe à l’état « invalide ». Elle tentera de se reconnecter et se réinitialisera si la connexion est rétablie ; cela garantit que toutes les propriétés sont à jour.
Propriété de la réplique
Les méthodes d’acquisition renvoient un pointeur vers l’ QObject e de réplique 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 d’une même réplique. Toutes les répliques d’une même source provenant d’un même nœud partageront un membre de données privé qui gère la communication réseau. Cela signifie que plusieurs instances d’une réplique n’engendrent pas de trafic réseau supplémentaire, bien qu’il y ait une légère surcharge de traitement. Si vous omettez de supprimer les répliques, le compteur de références de cet objet privé ne pourra pas atteindre 0, ce qui entraînera des communications réseau inutiles jusqu’à ce que le processus appelant se termine. C’est pourquoi il est recommandé d’utiliser QScopedPointer ou QSharedPointer pour faciliter le suivi de 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.