2011-01-08 86 views
1

我基本上熟悉Python中可用的RPC解決方案:XML-RPC和Pyro。我可以通過在服務器端綁定它來創建一個遠程對象,然後我可以在我可以運行的客戶端上獲得代理對象。當我在遠程對象上調用某種方法時,例如proxy.get_file(),那麼rpc機制會嘗試序列化一個結果對象(在這種情況下是一個文件)。這通常是預期的行爲,但我需要的是得到一個文件對象,另一個遠程代理對象,而不是得到它的傳輸到客戶端:遠程對象在python的RPC世界中返回另一個遠程對象

afile_proxy = proxy.get_file() 

相反的:

afile = proxy.get_file() 

我可以重新綁定這個對象在服務器端並且在客戶端處理這種情況,但是這需要一些鍋爐代碼。有沒有一種機制/庫可以爲我做到這一點?例如,它可以保持對象遙遠,直到它們是原始對象。

回答

0
afile_proxy = proxy.get_file_proxy() 

並在API中定義對象是什麼FileProxy。這完全取決於客戶端需要使用代理服務器。 Ge的名字?刪除它?獲取其內容?

如果您只想跟蹤您稍後要處理的內容,甚至可以使用引用(可能爲URL)。這就是所有嵌入式內容(如圖像)在網絡上所做的事情。

2

我發現了一個庫,它完全符合我的需求:RPyC。從intro

  • 簡單,不可變蟒對象(如字符串,整數,元組等)的值被傳遞,這意味着該值本身被傳遞到另一側。
  • 所有其他對象都通過引用傳遞,意味着對象的「引用」傳遞給另一端。這允許對引用對象應用的更改反映到實際對象上。

無論如何,謝謝你指出一個'參考'的術語。 :)

1

我參與開發一個新的遠程對象交互框架Versile Python(VPy),它執行與您列出的功能相似的功能。 VPy正在開發當前版本,主要用於測試,但請隨時查看。

有兩種方法可以執行您使用VPy描述的遠程I/O類型。一種是使用遠程native object對例如文件對象類似於Pyro/RPyC,並訪問類似於本地的對象。

另一種選擇是使用VPy remote stream框架,該框架非常靈活,可以配置爲執行雙向流式傳輸和操作,例如遠程重新定位或截斷流。第二種方法具有能夠實現異步I/O的優勢,並且流架構可以分割數據傳輸以減少往返延遲的影響。