Qt 远程对象节点

在 QtRO 网络中,信息通过 QRemoteObjectNodes ("节点") 在进程之间传递。这种点对点功能通过传递少量不同数据包来在节点之间传递必要的数据。

参与网络的每个进程都会实例化一个基于节点的类型,例如 QRemoteObjectNodeQRemoteObjectHostQRemoteObjectRegistry_host。节点的主机类型提供了额外的功能。QRemoteObjectHostQRemoteObjectRegistry_host 都支持 enableRemoting() 和相应的 disableRemoting() 方法,这是将源对象公开给网络的关键方法。要使用 注册表 功能,网络中需要有 QRemoteObjectRegistry_host。然后,所有其他节点都可以将注册表宿主机的 URL 传递给节点的 registryAddress 构造函数参数,或者将 URL 传递给 setRegistryUrl() 方法。

由于 QtRO 是一个点对点网络,要 获取() 一个有效的 副本,副本的节点需要连接到它的 节点。主机节点是指允许其他节点连接到它的节点,这通过为主机提供唯一的地址来实现。此地址提供给 QRemoteObjectHost 构造函数或通过 setHostUrl 方法设置。请求副本的节点必须建立与主机节点的连接,以初始化副本并保持其更新。

使用 QtRO URL 连接节点

主机节点使用自定义 URL 以简化连接。目前,QtRO 支持两种类型的连接

  1. 使用标准 TCP/IP 协议的 TCP 连接 - 支持设备之间以及同一设备上的进程之间的连接。
  2. 本地连接 - 支持同一设备上进程之间的连接。此类型连接的成本可以更少,这取决于底层操作系统的功能。

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

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

下表总结了可用的连接类型

URL说明
("local:service")使用(内部){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()方法之一,以实例化一个副本。

© 2024 The Qt Company Ltd. 文档贡献的版权属于各自的拥有者。此处提供的文档根据GNU自由文档许可协议第1.3版(由自由软件基金会发布)的条款进行许可。Qt及其相应的标志是芬兰及其在全球的其他国家的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。