2010-07-07 70 views
9

我需要圍繞網絡發送對象。我將要使用Twisted,並且我剛開始考慮它的文檔。在Python中通過網絡發送對象的最佳方式是什麼?

據我所知,python實現套接字的唯一方法是通過文本。那麼我將如何使用字符串發送對象?泡菜?還是有更好的?

+2

使用互聯網管道 – 2010-07-07 02:18:10

+3

其實,你最好使用管。 1998年,管子被管子取代。 – jathanism 2010-07-07 03:49:39

+1

是的。事實上,它們是一系列的。 – 2010-07-07 04:43:05

回答

18

對Python的端點之間提供了最一般的序列化是鹹菜格式(在Python凡因,一定要使用cPickle模塊和-1又名pickle.HIGHEST_PROTOCOL協議;如果你需要的Python凡因之間的互操作性和Python 3.需要更多的關注)。對於特別簡單的對象,marshal模塊有時可能更快,更緊湊。對於與非Python端點的互操作,json可能是最好的(或者您可以使用xml來定義或採用其他現有的序列化格式),但那些格式化和解析可能會體積更大,速度更慢。

據我所知,python 實現套接字的唯一方法是通過文本。

不,字節的所有字符串,歡迎 - )您可以通過一個事實,即在Python 2「正常字符串」實際上是個字節的字符串相混淆(「文本」將是unicode型)!; Python 3設置了正確的事物,並使用Unicode作爲「普通字符串」,並使用字節串的特定字節字符串類型。

字節字符串是任何語言根據某些協議或其他協議執行任何形式的序列化和反序列化的一般方式 - 這些字節流或blob可以進入網絡,數據庫,純文件等等, 當然。

Twisted提供了自己的序列化格式,作爲twisted.spread的一部分 - 它主要用於透視經紀商(PB),但如果您不想因爲某些特殊原因不想使用PB,則可以將其用於您自己的目的。對於連載,twisted.spread.jelly的文檔,是here,並總結好格式的目標...:

S-表達爲主 Python對象的持久性。

它做的很像 泡菜;然而,泡菜的主要目標 似乎是效率(在空間 和時間);果凍的主要目標是安全性,可讀性和 到其他環境的可移植性。

如果您更關心安全性,可讀性和便攜性,而不是速度和緊湊性,那麼果凍確實可以爲您提供良好的服務。

+0

這太棒了。謝謝您的幫助! – 2010-07-07 05:07:39

+0

只有2美分,我只有泡菜(cpickle)的麻煩。由於其脆弱性,我不會將它用作通用對象序列化器。我發現了編組基本數據類型或使用爲序列化構建的dao目的的最佳成功。 – ebt 2010-07-07 06:56:46

相關問題