QRemoteObjectNodes (let's shorten the name to Node for now) are what enables the passing of information between processes. All of the QtRO functionality is enabled by a small number of distinct packets passing the necessary data between nodes.
Each process that participates in QtRO's IPC will instantiate a Node-based type ( QRemoteObjectNode , QRemoteObjectHost ,或 QRemoteObjectRegistryHost ). The latter types of Nodes provide additional functionality. Both QRemoteObjectHost and QRemoteObjectRegistryHost 支持 enableRemoting() (and the corresponding disableRemoting() ) methods, which are the key methods to expose 源 objects to the network. In order to use the 注册 functionality, there should be one QRemoteObjectRegistryHost on the network. All other nodes can then pass the RegistryHost's URL to the Node's registryAddress 构造函数参数,或把 URL 传递给 setRegistryUrl() 方法。
QtRO works as a peer-to-peer network. That is, in order to acquire() 有效 复本 , 复本 node needs a connection to the node that hosts its 源 . A host node is a node that allows other nodes to connect to it, which is accomplished by giving hosts unique addresses (the address is provided to the QRemoteObjectHost constructor or set by the setHostUrl method). The node that a 复本 is requested from must establish the connection to the host node in order to initialize the 复本 and keep it up to date.
Host Nodes use custom URLs to simplify connections. While the list will likely be extended, QtRO currently supports two types of connections. A "tcp" connection (using the standard tcp/ip protocol) supports connections between devices as well as between processes on the same device. The 2nd option is a "local" connection - which can have less overhead, depending on the underlying OS features - but does not support connectivity between devices.
When using a local connection, a unique name must be used. For tcp connections, a unique address and port number combination much be used.
There is currently no zeroconf facility included in QtRO. All processes or devices must therefore know beforehand how to connect to each other. A QRemoteObjectRegistry (see below) can be used to simplify the connection process for a network with multiple Host Nodes.
Connection types are summarized in the following table.
URL | 主机节点 | 连接节点 |
---|---|---|
QUrl ("local:replica") | QLocalServer ("replica") | QLocalSocket ("replica") |
QUrl ("tcp://192.168.1.1:9999") | QTcpServer ("192.168.1.1",9999) | QTcpSocket ("192.168.1.1",9999) |
Nodes have a couple of enableRemoting() methods that are used to share objects on the network (this will produce an error if the Node is not a Host Node however). Other processes/devices that want to interact with a shared object use one of the 节点 acquire() methods to instantiate a replica.