2010-02-04 25 views
6

我在地理上分散的地點有兩臺電腦,都連接到互聯網。在每臺計算機上,我正在運行一個Python程序,並且我想發送和接收來自另一個的數據。我想盡可能使用最簡單的方法,同時保持一定的安全性。使用Python通過互聯網傳輸數據的最輕量級方式是什麼?

我已經考慮了以下解決方案,但我不知道這是最簡單的:

  • HTTP服務器和客戶端,使用protobuf *; SOAP服務和客戶端(pywebsvcs也許?);
  • SSH隧道上的某種IPC - 再次,protobuf也許?

就像我說的,我希望解決方案有點安全,但簡單是最重要的要求。數據非常簡單;類型A的對象,其中包含類型B的對象的列表,以及其他一些字段。

*我過去使用過protobuf,所以唯一的困難就是設置HTTP服務器,我猜這會是cherrypy。

+0

@尼克你有什麼特別不喜歡protobuf?它如何不像XML-RPC那樣輕量級? – 2010-02-04 14:01:09

+0

我更新了我的答案。 – 2010-02-04 14:56:00

+0

通過https的JSON?當然有一個Python庫來處理JSON。 – 2010-02-04 16:00:08

回答

3

最便宜和最簡單的傳輸方式可能是XML-RPC。它通過HTTP運行(所以你可以這樣保護它),它在標準庫中,與protobuf不同,你不必擔心創建和編譯你的數據類型文件(因爲兩端都運行Python,動態類型應該不是問題)。唯一需要注意的是,任何未在XML-RPC中表示的類型都必須進行酸洗或序列化。

+0

是的,這就是關於protobuf的最重要的東西;它似乎並不輕巧。我將檢查XML-RPC。 – 2010-02-04 13:46:59

+2

爲什麼不簡單地泡菜? 'cPickle'很快。 – 2010-02-04 15:24:25

+0

@Antoine P.啊,我已經實現了xml-rpc,但我會在下次嘗試! – 2010-02-08 19:53:28

0

你可以考慮Pyro,請務必閱讀Security chapter

更新:看來簡單的設置比Protocol Buffers的,可能需要較少的工作,如果您的需求在未來變得越來越複雜(他們有這樣做的一種方式...... :-)

+0

看起來不錯,但它似乎可能有點太強大,我想做什麼,你不覺得嗎? – 2010-02-04 13:55:06

9

協議緩衝器是「輕量級」的,因爲它們產生非常緊湊的線路表示,從而節省帶寬,內存,存儲等,同時保持非常通用的跨語言。當然,我們在Google上使用他們的批次,但是您是否關心這些性能特徵並不清楚 - 您似乎在與此不同的意義上使用「輕量級」,嚴格與(精神)負載相關在你身上,程序員,而不是所有在計算機和網絡上的(計算)負載;-)。

如果您不關心花費更多的帶寬/內存/等等,而且您也不關心以不同語言編寫參與子系統的能力,那麼協議緩衝區可能對您而言並不是最佳選擇。

既不是pickling,如果我正確地讀了你的「有點安全」的要求:取消適當構造的惡意pickled-string可以在取出機器上執行任意代碼。事實上,HTTP在一定程度上並不「有些安全」:在該協議中沒有任何東西可以阻止入侵者「嗅探」您的流量(所以您絕對不應該使用HTTP發送機密有效負載,除非您可能使用強加密在發送它之前的有效載荷並在接收它之後撤消)。爲了安全(再次取決於你對這個詞的含義),你需要HTTPS或者(更簡單的設置,不需要你購買證書!)SSH隧道。

一旦確實在兩臺機器之間建立了SSH隧道(對於Python,paramiko可以提供幫助,但即使通過shell腳本或通過其他方式直接控制ssh命令行客戶端也不會太糟糕;-)您可以運行它上面的任何協議(例如HTTP都可以),因爲隧道端點可以作爲您可以打開套接字的給定編號的端口。我個人推薦使用JSON而不是XML來對有效載荷進行編碼 - 例如,對於基於XMLRPC的基於JSON的RPC服務器和客戶端,請參閱here - 但我猜想使用Python標準庫附帶的XMLRPC服務器和客戶端是甚至更簡單,因此可能更接近你正在尋找的東西。爲什麼你還想要cherrypy?現在性能突然變得簡單了,僅僅是整個架構的這個方面,而在其他任何情況下,性能都是簡單的?這似乎是一個非常矛盾的建築選擇! - )

+0

在這種情況下,輕量級對我來說意味着「緊湊型表示」。請記住SSH也可以進行即時壓縮。 – 2010-02-04 19:24:38

+0

@Alex Martelli哈哈,是的,我的意思是輕量,因爲「實施更少的努力」,而不是「更少的電腦努力」。僅供參考,我決定使用Python的xml-rpc庫,因爲它似乎是最簡單的解決方案。 – 2010-02-08 19:52:43

0

Alex當然是對的。但是,我會記住,我過去一直很樂意用酸洗數據,並通過SSH將其推向另一個取消處理的過程。這很簡單。

但是,它不適合很多事情。你真的需要信任傳入的數據,在我的博客服務器收到一篇醃製博客帖子(我的客戶解析出標籤等)的情況下,我確實相信數據 - 它已經被我認證了。

亞歷克斯工作的Google是一個完全不同的問題。 :-)

相關問題