什么';在Python中,通过网络发送对象的最佳方式是什么?

什么';在Python中,通过网络发送对象的最佳方式是什么?,python,networking,twisted,Python,Networking,Twisted,我需要通过网络发送对象。我将使用Twisted,我刚刚开始查看文档 据我所知,python实现套接字的唯一方法是通过文本。那么如何使用字符串发送对象呢?泡菜?或者还有更好的吗?Python端点之间提供的最通用的序列化是pickle格式(在Python2.any中,确保使用cPickle模块和-1akapickle.HIGHEST_协议协议;如果需要Python2.any和Python3之间的互操作性,则需要更加小心)。对于特别简单的对象,marshal模块有时会更快、更紧凑。对于与非Python

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


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

Python端点之间提供的最通用的序列化是pickle格式(在Python2.any中,确保使用
cPickle
模块和
-1
aka
pickle.HIGHEST_协议
协议;如果需要Python2.any和Python3之间的互操作性,则需要更加小心)。对于特别简单的对象,
marshal
模块有时会更快、更紧凑。对于与非Python端点的互操作,
json
可能是最好的(或者您可以使用
xml
定义或采用其他现有的序列化格式),但这些格式可能会更大,格式化和解析速度也会更慢

据我所知,唯一的办法 通过文本实现套接字

不,所有的字节字符串都是受欢迎的!-)在Python 2中,“普通字符串”实际上是一个字节字符串(“文本”将是
unicode
类型),这可能会让您感到困惑;Python3设置正确,对“普通字符串”使用Unicode,对字节字符串使用特定的字节字符串类型

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

Twisted提供了自己的序列化格式,作为一部分——它主要用于透视代理(PB),但如果出于某些特殊原因不想使用PB,您可以根据自己的目的重新调整它的用途。序列化部分的文档是twisted.spread.jelly,它很好地概括了格式的目标:

基于S表达式的数据持久化 python对象

它的功能非常类似于 泡菜;然而,皮克尔的主要目标是 似乎是效率(在空间上和空间上) 和时间);杰利的主要目标是 安全性、人类可读性和 可移植到其他环境


如果您更关心安全性、可读性和可移植性,而不是速度和紧凑性,那么jelly可能确实能为您提供很好的服务。

实际上,您最好使用试管。管子在1998年被管子代替了。是的。事实上,有一系列的问题。只要2美分,我就只吃了泡菜(cpickle)。由于它的脆弱性,我不会将其用作一般对象序列化程序。我发现编组基本数据类型或使用专门为序列化而构建的dao最成功。