Communication interprocessus dans Qt
Qt propose plusieurs méthodes pour implémenter la communication inter-processus (IPC) dans les applications. Les fonctionnalités IPC de Qt comprennent :
- La synchronisation des processus et le partage des ressources
- L'échange de données au niveau des octets, en local ou sur un réseau
- Le partage d'objets Qt répliqués entre processus ou systèmes
- Transmission de messages structurés ou d’appels de procédure à distance (RPC)
- L'utilisation de protocoles M2M standard pour l'IoT et les systèmes industriels
La plupart des mécanismes de communication interprocessus (IPC) sont destinés aux périphériques en réseau et utilisent des protocoles réseau tels que TCP, UDP et HTTP. La présentation « Réseau et connectivité » aborde le sujet des réseaux plus en détail.
Qt prend en charge les formats de données structurés tels que JSON, XML, Protobuf et CBOR. Pour plus d’informations sur les données structurées, consultez les pages de présentation consacrées au traitement des données et aux E/S.
Synchronisation des processus et partage des ressources
Pour les processus qui partagent des ressources locales ou les systèmes qui synchronisent des actions et des données, vous pouvez utiliser des sémaphores système et la mémoire partagée. Ces fonctionnalités font partie du Qt Core module.
Qt fournit des classes pour la synchronisation inter-processus, notamment ` QSystemSemaphore`. À l’instar de ` QSemaphore`, il est accessible par plusieurs processus sur le même système. Il est identifié globalement par une clé, qui, dans Qt, est représentée par la classe ` QNativeIpcKey `. De plus, selon le système d’exploitation, Qt peut prendre en charge plusieurs backends différents pour le partage de mémoire.
Pour une explication détaillée, consultez les pages suivantes :
Mémoire partagée
La classe de mémoire partagée multiplateforme, QSharedMemory, permet d’accéder à l’implémentation de la mémoire partagée du système d’exploitation. Elle permet à plusieurs threads et processus d’accéder en toute sécurité à des segments de mémoire partagée. De plus, QSystemSemaphore contrôle l’accès aux ressources partagées par le système et permet la communication entre les processus.
Création de processus enfants
La classe QProcess peut lancer des programmes externes en tant que processus enfants et communiquer avec eux. Elle fournit une API permettant de surveiller et de contrôler l'état du processus enfant. QProcess donne accès aux canaux d'entrée et de sortie du processus enfant en héritant de QIODevice.
Partage d’objets Qt entre des processus ou des systèmes distants
Le Qt Remote Objects module fournit un mécanisme d’objets distants permettant aux périphériques et aux processus de partager des objets Qt. Il utilise un objet Source synchronisé avec des objets Replica via un nœud intermédiaire. Ces Replica sont essentiellement des proxys qui reflètent les propriétés, les signaux et les slots de l’objet Source, de sorte que les processus distants puissent interagir avec l’objet sans connaissance directe du transport réseau.
Envoi de messages via les appels de procédure à distance (RPC)
L'appel de procédure à distance (RPC) est un mécanisme de haut niveau qui fait abstraction de la communication réseau sous-jacente. Grâce au RPC, un client peut appeler des fonctions s'exécutant sur un serveur distant comme s'il s'agissait d'appels de fonctions locales. De nombreux langages prennent en charge les technologies RPC, ce qui simplifie la mise en œuvre dans des systèmes complexes utilisant plusieurs langages de programmation.
Le Qt GRPC module implémente les appels de procédure à distance (RPC) à l’aide du protocole gRPC. gRPC est un framework largement adopté pour l’envoi de messages au format sérialisé, utilisant le plus souvent HTTP/2 pour une communication réseau efficace. gRPC est particulièrement adapté à la communication au sein de microservices modulaires et d’applications à faible latence, telles que les plateformes de chat et de streaming.
Utilisation des protocoles industriels M2M
Les protocoles industriels Machine-to-Machine (M2M) sont spécifiques aux systèmes soumis à des contraintes de ressources strictes, tels que les capteurs et les systèmes d’automatisation. Ils sont souvent propres à un secteur d’activité et à des cas d’utilisation spécifiques, comme l’industrie manufacturière, la santé et la surveillance environnementale. Ces systèmes sont souvent de faible consommation et disposent de capacités de traitement limitées.
Le Qt MQTT module fournit des fonctionnalités MQTT aux applications Qt. MQTT est un protocole qui utilise le modèle « publication-abonnement » pour transmettre des informations au sein d’un système. Dans un système MQTT, un courtier gère l’envoi et la réception des données vers les clients. Les clients peuvent être des éditeurs, des abonnés, ou les deux. MQTT est particulièrement efficace dans les environnements à faible bande passante et à forte latence, tels que les systèmes industriels et de fabrication.
Le Qt CoAP module fournit le protocole CoAP (Constrained Application Protocol) aux applications Qt. CoAP est un protocole qui utilise UDP et les principes RESTful pour transmettre des informations au sein de systèmes aux ressources limitées. CoAP est spécialement conçu pour tirer parti de messages datagrammes compacts et d’une faible surcharge.
Le Qt OPC UA module fournit OPC UA aux applications Qt. Il utilise un mécanisme de communication interprocessus (IPC) client-serveur pour les systèmes industriels. OPC UA est destiné aux systèmes complexes et intègre des mesures de sécurité.
Vous pouvez mettre en œuvre des systèmes hybrides combinant MQTT, CoAP et OPC UA. Par exemple, vous pouvez implémenter la communication vers le cloud via MQTT, le système principal via OPC UA, et connecter les capteurs et appareils individuels à l’aide de CoAP.
Un protocole peut être largement adopté dans un secteur spécifique et son écosystème de développement. L’architecture du système et les messages sont également structurés différemment. Par exemple, MQTT utilise principalement TCP tandis que CoAP utilise UDP. Par conséquent, MQTT peut utiliser TLS et CoAP peut utiliser DTLS pour des transferts sécurisés.
Utilisation du protocole D-Bus
Le Qt D-Bus module est une bibliothèque réservée à Unix que vous pouvez utiliser pour implémenter la communication interprocessus (IPC) à l'aide du protocole D-Bus. Il étend le mécanisme des signaux et slots de Qt au niveau de l'IPC, permettant ainsi à un signal émis par un processus d'être connecté à un slot dans un autre processus.
Utilisation des sessions dans les applications
Sous Linux/X11, Windows et macOS, Qt prend en charge la gestion des sessions. Les sessions permettent de propager des événements vers les processus, par exemple pour signaler un arrêt du système. Les processus et les applications peuvent alors effectuer toutes les opérations nécessaires, telles que l'enregistrement des documents ouverts. Pour plus d'informations, consultez la page Gestion des sessions.
Considérations relatives à la sécurité de l’IPC
Les données étant transférées entre des processus ou des systèmes, vous devez tenir compte des questions de confidentialité et de sécurité. Des attaquants peuvent intercepter des données au sein des réseaux et des processus externes peuvent surveiller les données au sein d’un système.
Voici quelques mesures de sécurité que vous pouvez mettre en œuvre :
- Utilisez le chiffrement lors de l’envoi ou de la réception de données. Voir Classes Secure Sockets Layer (SSL).
- Utilisez des mécanismes d’authentification et d’autorisation robustes. Voir Qt Network Authorization.
- Validez et traitez les données non fiables. Voir Gestion des données non fiables.
- Définissez des limites de débit et surveillez le trafic pour prévenir toute utilisation abusive.
- Intégrez des techniques de « salting » ou de « nonce » pour vous protéger contre les attaques par surveillance et par rejeu.
- Mettez à jour votre environnement pour corriger les failles de sécurité.
La page Sécurité dans Qt présente les politiques et mesures de sécurité de Qt. Les modules Qt peuvent implémenter différents protocoles et peuvent donc nécessiter des précautions de sécurité supplémentaires.
© 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.