Qt Remote Objects Réplica
Una réplica compilada es un tipo basado en QRemoteObjectReplica, donde la definición de la clase derivada es generada automáticamente por el compilador repc. Cuando se utilizan funciones CMake o variables qmake para ejecutar el compilador repc, esto hace que la generación forme parte del proceso de compilación. Aunque sólo se genera una cabecera, es un tipo completo. No hay constructor público, por lo que es necesario utilizar la función de plantilla QRemoteObjectNode::acquire para crear la instancia de Replica.
Se puede generar un QRemoteObjectDynamicReplica en tiempo de ejecución. Para ello, se llama a QRemoteObjectNode::acquireDynamic(), pasando el nombre de la fuente (un QString) como argumento. Las réplicas dinámicas son un poco más verbosas de usar desde C++, pero no requieren compilación. Las réplicas dinámicas no soportan valores iniciales de propiedades, o introspección hasta que han sido inicializadas.
Una diferencia importante entre estas dos formas de crear réplicas es el comportamiento antes de que la réplica sea inicializada. Dado que una réplica dinámica sólo obtiene un metaObjeto después de la inicialización, básicamente no tiene API antes de la inicialización - sin propiedades, y sin señales a las que conectar ranuras.
Dado que los metaObjetos de las réplicas compiladas se crean en tiempo de compilación, su API está disponible cuando se instancia la réplica. Incluso puede proporcionar valores por defecto para las propiedades en el archivo de plantilla, que se utilizan hasta que la réplica se inicializa con los valores actuales de la fuente.
Inicialización de la réplica
Un nodo anfitrión compartirá la lista de fuentes que aloja con cualquier otro nodo que se conecte a él. Este host envía actualizaciones cuando se añaden o eliminan fuentes de la lista. De este modo, un nodo conectado siempre sabrá a qué fuentes puede conectarse. Los cambios en una fuente concreta sólo se propagan a los nodos que tienen una réplica de esa fuente. De este modo se evita un tráfico de red innecesario.
Cuando un nodo adquiere una réplica de una fuente conocida, envía una solicitud para esa fuente al nodo anfitrión. Al recibir esta solicitud, el anfitrión crea un paquete de respuesta con los valores actuales de todas las propiedades de esa fuente. Si la réplica solicitada es dynamic, el paquete de respuesta incluye la definición de la API para la fuente. A partir de ese momento, el nodo de la réplica se incluirá en la lista de conexiones que reciben cambios de esa fuente.
Si se instancia una réplica pero su nodo no está conectado al nodo que aloja la fuente solicitada -o ese objeto vive en un proceso de nodo anfitrión, pero no se ha habilitado la compartición/remoción para QObject - la réplica se seguirá creando, pero permanecerá sin inicializar.
Si, en un momento posterior, el nodo de la réplica recibe la notificación de que la fuente solicitada está disponible en un nodo conectado, en ese momento solicitará la fuente e iniciará el proceso de inicialización.
Si se pierde la conexión con un nodo anfitrión, la réplica pasará al estado inválido. Intentará reconectarse y se reinicializará si se restablece la conexión; esto asegura que todas las propiedades están actualizadas.
Propiedad de la réplica
Los métodos de adquisición devuelven un puntero a la réplica QObject instanciada por el nodo. El nodo no tiene forma de conocer el tiempo de vida previsto de la réplica. En consecuencia, cuando la réplica ya no es necesaria, es responsabilidad del programa que la llama eliminarla.
Se pueden instanciar múltiples copias de la misma réplica. Todas las réplicas de la misma fuente de un único nodo compartirán un miembro de datos privado que gestiona la comunicación de red. Esto significa que múltiples instancias de una réplica no introducen tráfico de red adicional, aunque habrá cierta sobrecarga de procesamiento adicional. Si no se eliminan las réplicas, se evitará que el recuento de referencias de este objeto privado llegue a 0 y se producirá una comunicación de red innecesaria hasta que se cierre el proceso de llamada. Por esta razón, se recomienda utilizar QScopedPointer o QSharedPointer para ayudar a realizar un seguimiento de la vida útil de las réplicas.
© 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.