在 QtRO 网络,进程间信息的传递是凭借 QRemoteObjectNodes("nodes")。这种点对点功能,是使用少量截然不同的数据包在 Node (节点) 之间传递必要数据。
参与网络的各进程会实例化基于 Node (节点) 的类型,譬如
QRemoteObjectNode
,
QRemoteObjectHost
,或
QRemoteObjectRegistryHost
。Node (节点) 的主机类型有提供额外功能。两者
QRemoteObjectHost
and
QRemoteObjectRegistryHost
支持
enableRemoting()
和相应
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() 有效 复本 需要把复本节点连接到的节点会托管其 源 。主机节点是允许其它节点连接到它的节点,是通过给出主机唯一地址完成的。此地址被提供给 QRemoteObjectHost 构造函数 (或通过 setHostUrl 方法设置)。来自请求复本的节点必须建立到主机节点的连接,以初始化复本并保持最新。
主机 Node (节点) 使用自定义 URL (统一资源定位符) 简化连接。目前,QtRO 支持 2 种类型的连接:
对于 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() 方法,用于在网络中共享对象。不管怎样,若节点不是主机节点,返回错误。
其它进程 (或设备) 想要与共享对象交互,可以使用某一 节点 acquire() 方法,以实例化复本。