Qt Remote Objects 节点

在 QtRO 网络,进程间信息的传递是凭借 QRemoteObjectNodes("nodes")。这种点对点功能,是使用少量截然不同的数据包在 Node (节点) 之间传递必要数据。

参与网络的各进程会实例化基于 Node (节点) 的类型,譬如 QRemoteObjectNode , QRemoteObjectHost ,或 QRemoteObjectRegistryHost 。Node (节点) 的主机类型有提供额外功能。两者 QRemoteObjectHost and QRemoteObjectRegistryHost 支持 enableRemoting () and the corresponding disableRemoting () methods, which are the key methods to expose source objects to the network. To use the 注册 功能,需要拥有 QRemoteObjectRegistryHost 在网络中。然后,所有其它节点可以将 RegistryHost 的 URL (统一资源定位符) 传递给节点的 registryAddress 构造函数参数,或把 URL 传递给 setRegistryUrl () 方法。

由于 QtRO 是点对点网络,要 acquire () a valid 复本 需要把复本节点连接到的节点会托管其 。主机节点是允许其它节点连接到它的节点,是通过给出主机唯一地址完成的。此地址被提供给 QRemoteObjectHost 构造函数 (或通过 setHostUrl 方法设置)。来自请求复本的节点必须建立到主机节点的连接,以初始化复本并保持最新。

连接节点使用 QtRO URL

主机 Node (节点) 使用自定义 URL (统一资源定位符) 简化连接。目前,QtRO 支持 2 种类型的连接:

  1. TCP (传输控制协议) 连接使用标准 TCP/IP 协议 - 支持设备之间的连接,及同一设备进程间的连接。
  2. local 连接 - 支持同一设备进程间的连接。这种类型的连接可以拥有更小的开销,从属底层 OS (操作系统) 特征。

对于 local 连接,必须使用唯一名称。对于 TCP 连接,必须提供唯一地址和端口号的组合。

目前,QtRO 不包括 zeroconf 设施。因此,所有进程 (或设备) 必须事先知道,如何相互连接。 QRemoteObjectRegistry 可可以用于简化,具有多主机节点网络的连接过程。

下表汇总了可用的连接类型:

URL 注意事项
("local:service") Uses (internally) { QLocalServer }/{ QLocalSocket } classes to communicate between nodes.
("tcp://192.168.1.1:9999") Uses (internally) { QTcpServer }/{ QTcpSocket } classes to communicate between nodes.
("qnx:service") QNX OS only. Uses a custom (named) channel for native communication between nodes.
("localabstract:service") Since 6.2. Linux/Android OSes only. Uses an abstract namespace for Unix domain sockets. This allows QLocalSocket behavior to work on non-writable devices.

Node (节点) 有几个 enableRemoting () methods that are used to share objects on the network. However, if the node is not a host node, an error is returned.

其它进程 (或设备) 想要与共享对象交互,可以使用某一 节点 acquire() 方法,以实例化复本。