繁体   English   中英

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

[英]What's the best way to send an object over a network in Python?

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

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

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

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

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

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

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

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

它做的非常像Pickle; 然而,泡菜的主要目标似乎是效率(空间和时间); jelly的主要目标是安全性,人类可读性以及对其他环境的可移植性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM