Qt Remote Objects 节点
在 QtRO 网络中,信息通过 QRemoteObjectNodes(“节点”)在进程之间传递。这种点对点功能利用少量不同的数据包在节点之间传递必要的数据。
参与网络的每个进程都会实例化基于 Node 的类型,例如QRemoteObjectNode 、QRemoteObjectHost 或QRemoteObjectRegistryHost 。Node 的宿主类型提供了额外功能。QRemoteObjectHost 和QRemoteObjectRegistryHost 都支持enableRemoting() 以及相应的disableRemoting() 方法,这些是将源对象暴露给网络的关键方法。要使用Registry功能,您需要在网络上拥有一个QRemoteObjectRegistryHost 。 然后,所有其他节点都可以将 RegistryHost 的 URL 传递给 Node 的registryAddress 构造函数参数,或者将该 URL 传递给setRegistryUrl() 方法。
由于 QtRO 是一个点对点网络,要通过 `acquire()` 创建一个有效的副本,该副本的节点需要与托管其源的节点建立连接。 主机节点是指允许其他节点与其连接的节点,这通过为主机分配唯一地址来实现。该地址需提供给QRemoteObjectHost 构造函数,或通过setHostUrl方法进行设置。请求副本的节点必须与主机节点建立连接,以便初始化副本并保持其数据最新。
使用 QtRO URL 连接节点
主机节点使用自定义 URL 来简化连接。目前,QtRO 支持两种类型的连接:
- 使用标准 TCP/IP 协议的 TCP 连接——支持设备之间的连接,以及同一设备上进程之间的连接。
- 本地连接——支持同一设备上进程之间的连接。根据底层操作系统的特性,此类连接的开销可能较小。
对于本地连接,必须使用一个唯一名称。对于 TCP 连接,必须提供一个唯一的地址和端口号组合。
目前,QtRO 不包含零配置(zeroconf)功能。因此,所有进程或设备都必须预先知道如何相互连接。在包含多个主节点的网络中,可以使用“QRemoteObjectRegistry ”来简化连接过程。
下表总结了可用的连接类型:
| URL | 备注 |
|---|---|
| ("local:service") | 使用(内部){QLocalServer}/{QLocalSocket} 类在节点之间进行通信。 |
| ("tcp://192.168.1.1:9999") | (在内部)使用 {QTcpServer}/{QTcpSocket} 类在节点之间进行通信。 |
| ("qnx:service") | 仅限 QNX 操作系统。使用自定义(命名)信道实现节点之间的原生通信。 |
| ("localabstract:service") | 自 6.2 版本起。仅限 Linux/Android 操作系统。使用一个用于 Unix 域套接字的抽象命名空间。这使得QLocalSocket 的行为可在不可写设备上正常工作。 |
节点提供了一些enableRemoting() 方法,用于在网络上共享对象。但是,如果该节点不是主机节点,则会返回错误。
其他希望与共享对象交互的进程或设备可以使用其中一个 `node's acquire() ` 方法来实例化一个副本。
© 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.