Qt Remote Objects

遠程對象概念

QtRO (Qt Remote Objects) 是為 Qt 開發的 IPC (進程間通信) 模塊。此模塊擴展瞭 Qt 的現有功能,使進程 (或計算機) 之間能夠輕鬆交換信息。

使這種信息能夠交換的關鍵 Qt 特徵之一,是對象 API (由其特性、信號及槽定義) 和該 API 實現之間的區彆。QtRO 的目的是滿足期望 API,即使真實 QObject 在不同進程中。稱為槽的對象復本 ( 復本 在 QtRO) 會被轉發給真實對象 ( Source 在 QtRO) 進行處理。各 Replica (復本) 接收 Source (源) 特性改變或發射信號的更新。

A 復本 是輕量級代理對於 Source 對象,但 Replica (復本) 支持如 QObjects 的相同連接和行為,使之能以相同方式使用如任何其它 QObject 由 Qt 提供。在幕後,QtRO 處理看起來像其 Source (源) 的必要 Replica (復本) 的一切。

注意,遠程對象的行為異於傳統 RPC (遠程過程調用) 實現,例如:

  • 在 RPC,客戶端發齣請求並等待響應。
  • 在 RPC,服務器不會嚮客戶端推送任何東西,除非是響應請求。
  • 通常,RPC 的設計是不同客戶端彼此獨立:例如,2 客戶端可以詢問映射服務方嚮,並獲得不同結果。

雖然以 QtRO 實現這種 RPC 風格行為是可能的,如沒有特性的 Source (源) 和擁有返迴值的槽,但 QtRO 隱藏瞭處理是真正遠程的事實。讓節點給您 Replica (復本),而不是自己創建的,可以使用狀態信號 ( isReplicaValid() ),然後與對象交互就像采用任何其它 QObject 基類型。

使用案例:GPS

考慮傳感器,譬如 GPS (全球定位係統) 接收器。按 QtRO 術語:

  • The Source 將是與 GPS 硬件直接交互並派生你當前位置的進程。
  • 位置將暴露成 QObject 特性;對位置的周期性更新將更新這些特性並發射特性改變信號。
  • 復本 將在其它進程中被創建且始終知道您的當前位置,但不需要任何邏輯計算來自傳感器數據的位置。
  • 連接到 Replica (復本) 的位置改變信號將如期望般工作:從 Source (源) 發射的信號將觸發每個復本發齣的信號。

使用案例:訪問打印機

考慮對打印機提供訪問的服務。按 QtRO 術語:

  • The Source 將是直接控製打印機的進程。
  • 墨水量和打印機狀態的監視是通過 QObject 特性。這些特性的更新將發射特性改變信號。
  • 關鍵特徵 -- 能打印一些東西 -- 需要傳迴給打印機。順便說一句,這對齊 Qt 槽機製,使用 QtRO 的方式對於 復本 是對 Source (源) 進行調用。實際上,特性和信號是從 Source (源) 到 Replica (復本);槽是從 Replica (復本) 到 Source (源)。
  • 當打印請求被接受時,打印機狀態改變,觸發狀態特性改變。然後,這會被報告給所有 Replica (復本)。

指南

參考

許可

Qt Remote Objects 在商業許可下是可用的來自 Qt 公司 。此外,它是可用的根據 GNU LGPL (次一般公共許可) 第 3 版 ,或 GNU GPL (一般公共許可) 第 2 版 。見 Qt 許可 進一步瞭解細節。