在 QtRO 网络,进程间信息的传递是凭借 QRemoteObjectNodes("nodes")。这种点对点功能,是使用少量截然不同的数据包在 Node (节点) 之间传递必要数据。
参与网络的各进程会实例化基于 Node (节点) 的类型,譬如
QRemoteObjectNode
,
QRemoteObjectHost
,或
QRemoteObjectRegistryHost
。Node (节点) 的主机类型有提供额外功能。两者
QRemoteObjectHost
and
QRemoteObjectRegistryHost
支持
enableRemoting()
和相应
disableRemoting()
方法,向网络暴露 Source (源) 对象的关键方法。要使用
注册
功能,需要拥有
QRemoteObjectRegistryHost
在网络中。然后,所有其它节点可以将 RegistryHost 的 URL (统一资源定位符) 传递给节点的
registryAddress
构造函数参数,或把 URL 传递给
setRegistryUrl()
方法。
由于 QtRO 是点对点网络,要 acquire() 有效 复本 需要把复本节点连接到的节点会托管其 源 。主机节点是允许其它节点连接到它的节点,是通过给出主机唯一地址完成的。此地址被提供给 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() 方法,以实例化复本。