在Python中通过网络发送对象的最佳方法是什么?

时间:2010-07-07 02:14:18

标签: python networking twisted

我需要在网络周围发送对象。我将使用Twisted,我刚刚开始查看文档。

据我所知,python实现套接字的唯一方法是通过文本。那么我如何使用字符串发送对象?泡菜?还是有更好的东西?

1 个答案:

答案 0 :(得分:18)

Python端点之间提供的最常见的序列化是pickle格式(在Python 2.any中,一定要使用cPickle模块,-1又称pickle.HIGHEST_PROTOCOL协议;如果你需要Python 2.any和Python之间的互操作性3.需要更多的关注)。对于特别简单的对象,marshal模块有时可以更快,更紧凑。为了与非Python端点进行互操作,json可能是最好的(或者您可以使用xml来定义或采用其他现有的序列化格式),但这些格式化和解析可能会更加庞大且速度更慢。 / p>

  

据我所知,python的唯一方法   实现套接字是通过文本。

不,欢迎所有字符串字符串! - )您可能会对Python 2中的“普通字符串”实际上是一个字节字符串(“text”将是unicode类型)这一事实感到困惑; Python 3设置正确,并使用Unicode作为“普通字符串”,并使用特定字节字符串类型作为字节串。

字节串是任何语言根据某些协议或其他方式执行任何形式的序列化和反序列化的一般方式 - 这样的字节流或blob可以进入网络,数据库,普通文件等,当然。

Twisted提供了自己的序列化格式,作为twisted.spread的一部分 - 它主要用于Perspective Broker(PB),但如果您不想将PB用于某些特殊情况,您可以将其重新用于自己的目的原因。序列化部分twisted.spread.jelly的文档是here,并且总结了格式的目标...:

  

基于S表达式的持久性   python对象。

     

它做的非常像   泡菜;然而,泡菜的主要目标   似乎是效率(在太空中   和时间);果冻的主要目标是   安全性,人类可读性和   可移植到其他环境。

如果您更关心安全性,可读性和便携性,而不是速度和紧凑性,那么果冻可能确实对您有用。