在 QtRO 网络,进程间信息的传递是凭借 QRemoteObjectNodes("nodes")。这种点对点功能,是使用少量截然不同的数据包在 Node (节点) 之间传递必要数据。
参与网络的各进程会实例化基于 Node (节点) 的类型,譬如
QRemoteObjectNode
,
QRemoteObjectHost
,或
QRemoteObjectRegistryHost
。Node (节点) 的主机类型有提供额外功能。两者
QRemoteObjectHost
and
QRemoteObjectRegistryHost
支持
enableRemoting()
和相应
disableRemoting()
方法,向网络暴露 Source (源) 对象的关键方法。要使用
注册
功能,需要拥有
QRemoteObjectRegistryHost
在网络中。然后,所有其它节点可以将 RegistryHost 的 URL (统一资源定位符) 传递给节点的
registryAddress
构造函数参数,或把 URL 传递给
setRegistryUrl()
方法。
由于 QtRO 是点对点网络,要 acquire() 有效 复本 需要把复本节点连接到的节点会托管其 Source 。主机节点是允许其它节点连接到它的节点,是通过给出主机唯一地址施行的。此地址提供给 QRemoteObjectHost 构造函数 (或通过 setHostUrl 方法设置)。来自请求复本的节点必须建立到主机节点的连接,以初始化复本并保持最新。
主机 Node (节点) 使用自定义 URL (统一资源定位符) 简化连接。目前,QtRO 支持 2 种类型的连接:
对于 local 连接,必须使用唯一名称。对于 TCP 连接,必须提供唯一地址和端口号的组合。
目前,QtRO 不包括 zeroconf 设施。因此,所有进程 (或设备) 必须事先知道,如何相互连接。 QRemoteObjectRegistry 可可以用于简化,具有多主机节点网络的连接过程。
下表汇总了可用的连接类型:
| URL | 主机节点 | 连接节点 |
|---|---|---|
| QUrl ("local:service") | QLocalServer ("service") | QLocalSocket ("service") |
| QUrl ("tcp://192.168.1.1:9999") | QTcpServer ("192.168.1.1",9999) | QTcpSocket ("192.168.1.1",9999) |
Node (节点) 有几个 enableRemoting() 方法,用于在网络中共享对象。不管怎样,若节点不是主机节点,返回错误。
其它进程 (或设备) 想要与共享对象交互,可以使用某一 节点 acquire() 方法,以实例化复本。