Qt Remote Objects 节点
在 QtRO 网络中,进程之间通过 QRemoteObjectNodes("节点")传递信息。这种点对点功能使用少量不同的数据包在节点之间传递必要的数据。
参与网络的每个进程都实例化了一个基于节点的类型,如QRemoteObjectNode 、QRemoteObjectHost 或QRemoteObjectRegistryHost 。节点的主机类型提供了额外的功能。QRemoteObjectHost 和QRemoteObjectRegistryHost 都支持enableRemoting() 和相应的disableRemoting() 方法,这些方法是向网络公开源对象的关键方法。要使用注册表功能,需要在网络上有一个QRemoteObjectRegistryHost 。然后,所有其他节点都可以将 RegistryHost 的 URL 传递给节点的registryAddress
构造函数参数,或将 URL 传递给setRegistryUrl() 方法。
由于 QtRO 是一个点对点网络,要acquire() 一个有效的副本,副本的节点需要连接到托管其源代码的节点。主机节点是允许其他节点连接到它的节点,这是通过赋予主机唯一地址来实现的。该地址由QRemoteObjectHost 构造函数提供,或由 setHostUrl 方法设置。请求副本的节点必须建立与主机节点的连接,以初始化副本并保持更新。
使用 QtRO URL 连接节点
主机节点使用自定义 URL 来简化连接。目前,QtRO 支持两种类型的连接:
- 使用标准 TCP/IP 协议的 TCP 连接 - 支持设备之间以及同一设备上的进程之间的连接。
- 本地连接 - 支持同一设备上进程之间的连接。这种类型的连接开销较小,具体取决于操作系统的底层功能。
对于本地连接,必须使用唯一的名称。对于 TCP 连接,必须提供唯一的地址和端口号组合。
目前,QtRO 不包括zeroconf设施。因此,所有进程或设备必须事先知道如何相互连接。QRemoteObjectRegistry 可用于简化有多个主机节点的网络的连接过程。
下表总结了可用的连接类型:
URL | 注释 |
---|---|
("本地:服务) | 使用(内部){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() 方法之一来实例化一个副本。
© 2025 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.