Qtリモートオブジェクトノード
QtROネットワークでは、QRemoteObjectNodes("ノード")を経由してプロセス間で情報がやり取りされます。このピアツーピア機能は、ノード間で必要なデータを渡す少数のパケットを使用します。
ネットワークに参加する各プロセスは、QRemoteObjectNode 、QRemoteObjectHost 、QRemoteObjectRegistryHost などのノード・ベースのタイプをインスタンス化します。 ノードのホスト・タイプは、追加の機能を提供します。QRemoteObjectHost とQRemoteObjectRegistryHost はいずれも、enableRemoting ()と対応するdisableRemoting ()メソッドをサポートしています。これらは、ソース・オブジェクトをネットワークに公開するための重要なメソッドです。レジストリ機能を使用するには、ネットワーク上にQRemoteObjectRegistryHost が必要です。次に、他のすべてのノードは、RegistryHost の URL を Node のregistryAddress
コンストラクタのパラメータに渡すか、setRegistryUrl() メソッドに URL を渡します。
QtRO はピアツーピアのネットワークであるため、acquire() が有効なレプリカであるためには、レプリカのノードはそのソースをホストしているノードに接続されている必要がある。ホストノードとは、他のノードが接続できるようにするノードで、ホストに一意なアドレスを与えることで実現します。このアドレスはQRemoteObjectHost コンストラクタで指定するか、setHostUrl メソッドで設定します。レプリカを要求されたノードは、ホストノードとの接続を確立し、レプリカを初期化し、最新の状態に保つ必要があります。
QtRO URL を使用したノード接続
ホストノードでは、接続を簡単にするためにカスタム URL を使用します。現在、QtRO は2種類の接続をサポートしています:
- 標準 TCP/IP プロトコルを使用した TCP 接続 - デバイス間の接続と、同じデバイス上のプロセス間の接続をサポートします。
- ローカル接続 - 同じデバイス上のプロセス間の接続をサポートします。このタイプの接続は、基盤となるオペレーティング・システムの機能によっては、オーバーヘッドが少ない場合があります。
ローカル接続では、一意の名前を使用する必要があります。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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。