Qtリモートオブジェクトノード

QtROネットワークでは、QRemoteObjectNodes("ノード")を経由してプロセス間で情報がやり取りされます。このピアツーピア機能は、ノード間で必要なデータを渡す少数のパケットを使用します。

ネットワークに参加する各プロセスは、QRemoteObjectNodeQRemoteObjectHostQRemoteObjectRegistryHost などのノード・ベースのタイプをインスタンス化します。 ノードのホスト・タイプは、追加の機能を提供します。QRemoteObjectHostQRemoteObjectRegistryHost はいずれも、enableRemoting ()と対応するdisableRemoting ()メソッドをサポートしています。これらは、ソース・オブジェクトをネットワークに公開するための重要なメソッドです。レジストリ機能を使用するには、ネットワーク上にQRemoteObjectRegistryHost が必要です。次に、他のすべてのノードは、RegistryHost の URL を Node のregistryAddress コンストラクタのパラメータに渡すか、setRegistryUrl() メソッドに URL を渡します。

QtRO はピアツーピアのネットワークであるため、acquire() が有効なレプリカであるためには、レプリカのノードはそのソースをホストしているノードに接続されている必要がある。ホストノードとは、他のノードが接続できるようにするノードで、ホストに一意なアドレスを与えることで実現します。このアドレスはQRemoteObjectHost コンストラクタで指定するか、setHostUrl メソッドで設定します。レプリカを要求されたノードは、ホストノードとの接続を確立し、レプリカを初期化し、最新の状態に保つ必要があります。

QtRO URL を使用したノード接続

ホストノードでは、接続を簡単にするためにカスタム URL を使用します。現在、QtRO は2種類の接続をサポートしています:

  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 OS のみ。ノード間のネイティブ通信にカスタム(名前付き)チャネルを使用します。
("localabstract:service")6.2以降。Linux/Android OSのみ。Unixドメインソケット用の抽象名前空間を使用します。これにより、QLocalSocket の動作が書き込み不可能なデバイスでも動作する。

ノードには、ネットワーク上でオブジェクトを共有するために使用されるいくつかのenableRemoting ()メソッドがあります。ただし、ノードがホスト・ノードでない場合はエラーが返される。

共有オブジェクトと対話したい他のプロセスやデバイスは、node's acquire() メソッドのいずれかを使用して、レプリカをインスタンス化することができます。

本書に含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。