Qt 中的进程间通信
Qt 提供了多种在应用程序中实现进程间通信(IPC)的方法。Qt 中的 IPC 功能包括:
- 进程同步与资源共享
- 在本地或通过网络交换字节级数据
- 在进程或系统之间共享复制的 Qt 对象
- 传递结构化消息或远程过程调用(RPC)
- 为物联网和工业系统使用 M2M 行业标准协议
许多进程间通信(IPC)机制适用于联网设备,并采用 TCP、UDP 和 HTTP 等网络协议。《网络与连接》概述对网络主题进行了更详细的介绍。
Qt 支持 JSON、XML、Protobuf 和 CBOR 等结构化数据格式。有关结构化数据的更多信息,请参阅“数据处理与 I/O”概述页面。
进程同步与资源共享
对于共享本地资源的进程或需要同步操作和数据的系统,您可以使用系统信号量和共享内存。这些功能属于 Qt Core 模块的一部分。
Qt 提供了用于进程间同步的类,包括 `QSystemSemaphore`。与 `QSemaphore` 类似,同一系统上的多个进程均可访问该类。它通过一个键进行全局标识,在 Qt 中由 `QNativeIpcKey ` 类表示。此外,根据操作系统的不同,Qt 可能支持多种不同的内存共享后端。
如需详细说明,请参阅以下页面:
共享内存
跨平台共享内存类QSharedMemory 可访问操作系统的共享内存实现。它允许多个线程和进程安全地访问共享内存段。此外,QSystemSemaphore 控制对系统共享资源的访问,并支持进程间的通信。
创建子进程
QProcess 类可将外部程序作为子进程启动并与之通信。它提供了一套API来监控和控制子进程的状态。QProcess 通过继承自QIODevice ,提供了对子进程输入和输出通道的访问。
在远程进程或系统之间共享 Qt 对象
该 Qt Remote Objects 模块提供了一种远程对象机制,使设备和进程能够共享 Qt 对象。它使用一个Source对象,该对象通过中间节点与Replica对象保持同步。这些 Replica 对象本质上是代理,它们镜像 Source 对象的属性、信号和插槽,从而使远程进程无需直接了解网络传输机制即可与该对象交互。
使用远程过程调用(RPC)发送消息
远程过程调用(RPC)是一种抽象了底层网络通信的高级机制。借助 RPC,客户端可以调用在远程服务器上执行的函数,其操作体验如同本地函数调用一般。多种编程语言都支持 RPC 技术,这简化了在使用多种编程语言的复杂系统中的实现工作。
该 Qt GRPC 模块采用 gRPC 协议实现远程过程调用(RPC)。gRPC 是一个被广泛采用的框架,用于发送序列化格式的消息,通常使用 HTTP/2 实现高效的网络通信。 gRPC 非常适合用于模块化微服务以及聊天和流媒体平台等低延迟应用程序的通信。
使用 M2M 行业标准协议
机器对机器(M2M)行业协议专为受严格资源限制的系统而设计,例如传感器和自动化系统。这些协议通常针对特定行业和用例,如制造业、医疗保健和环境监测。此类系统通常功耗较低,且处理能力有限。
该 Qt MQTT 该模块为 Qt 应用程序提供了 MQTT 功能。MQTT 是一种采用发布-订阅模式在系统内传输信息的协议。在 MQTT 系统中,中间件负责管理客户端的发送和接收操作。 客户端可以是发布者、订阅者,或兼具两者角色。MQTT 在带宽低、延迟高的环境中(如工业和制造系统)表现尤为出色。
该 Qt CoAP 模块为 Qt 应用程序提供了受限应用协议(CoAP)。CoAP 是一种利用 UDP 和 RESTful 原则在受限系统内传输信息的协议。CoAP 专为利用紧凑的数据报消息和低开销而设计。
该 Qt OPC UA 该模块为 Qt 应用程序提供 OPC UA 支持。它采用客户端和服务器端的 IPC 机制,适用于工业系统。OPC UA 专为复杂系统设计,并具备内置的安全措施。
您可以结合 MQTT、CoAP 和 OPC UA 构建混合系统。例如,您可以使用 MQTT 实现云通信,使用 OPC UA 构建主系统,并使用 CoAP 连接各个传感器和设备。
某种协议可能在特定行业及其开发生态系统中被广泛采用。系统架构和消息格式也各不相同。例如,MQTT主要使用TCP,而CoAP使用UDP。因此,MQTT可以使用TLS,而CoAP可以使用DTLS进行安全传输。
使用 D-Bus 协议
该 Qt D-Bus 模块是一个仅限 Unix 系统的库,可用于通过 Qt D-Bus 协议实现进程间通信(IPC)。它将 Qt 的信号与槽机制扩展到进程间通信层面,允许一个进程发出的信号与另一个进程中的槽建立连接。
在应用程序中使用会话
在 Linux/X11、Windows 和 macOS 系统上,Qt 提供了对会话管理的支持。会话允许将事件传播到各个进程,例如在发生关机时发出通知。随后,这些进程和应用程序可以执行任何必要的操作,例如保存打开的文档。有关更多信息,请参阅“会话管理”页面。
IPC 安全注意事项
由于数据在进程或系统之间传输,因此需要考虑隐私和安全问题。攻击者可能在网络中拦截数据,外部进程也可能监视系统内的数据。
您可以实施以下安全措施:
- 在发送或接收数据时使用加密。请参阅“安全套接层 (SSL) 类”。
- 使用强认证和授权机制。请参阅“Qt Network ”授权。
- 验证并处理不可信数据。请参阅《处理不可信数据》。
- 设置速率限制并监控流量,以防止滥用。
- 采用加盐或随机数技术,以防范监听和重放攻击。
- 更新您的环境以修复安全漏洞。
“Qt 中的安全性”页面讨论了 Qt 的安全策略和措施。Qt 模块可能实现不同的协议,因此可能存在额外的安全注意事项。
© 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.