1
xowenx 2012-08-06 00:01:13 +08:00 1
protobuffer,thrift
推荐更轻量的protobuffer |
2
keakon 2012-08-06 00:02:42 +08:00 2
不管你是什么协议,发送的都是字符串,区别是文本或二进制…
如果双方都用Python,可以用pickle;否则可以用struct,自己做解析;和JavaScript打交道的话可以用JSON。 |
3
Livid MOD import marshal
help(marshal) marshal.loads() marshal.dumps() |
4
freefcw 2012-08-06 09:41:42 +08:00 1
如果想发送二进制的数据的话,可以使用bytearray,不过编码和解码算法需要自己定义,好处是通用性比较好,各种语言通用
from ctypes import bytearray ACK = bytearray(3) ACK[0]=0x80; ACK[1]=0x02; ACK[2]=0xfe; |
5
zxp 2012-08-06 09:59:23 +08:00 1
还有phprpc可以用
|
6
richardma 2012-08-06 12:36:53 +08:00 1
感觉就是序列化,然后在eval的过程,说到底就是这个意思,实现上应该有很多库吧。
|
7
kavinyao 2012-08-06 12:55:31 +08:00 1
@Livid 一直想请教这个问题:官方文档中说marshal是内部模块,并且不推荐作序列化使用。但是之前看一些slides,感觉很多人都marshal来序列化。
请问这是通用做法吗?相对于pickle和shelve有何好处? |
9
fanzeyi 2012-08-06 13:14:10 +08:00 2
@kavinyao 我记得有说 marshal 在不同的 Python 版本中的表现不同.. 所以不能跨 Python 版本通过它交换数据
|
10
notedit 2012-08-06 13:20:00 +08:00 3
@kavinyao pickle 本身是一门语言,在解码的时候可以构造一些代码让其执行,不安全。marshal 是python 专有的,其他的语言没法解析,如果你只在python服务之间传递的话,可以使用。
我自己使用比较多的是bson和msgpack,推荐msgpack,打包的数据更小,多语言支持。 |
12
leafduo 2012-08-07 01:12:45 +08:00
JSON 呗,流量敏感的话就 protobuf
|
13
Livid MOD |
14
dreampuf 2012-08-08 15:13:26 +08:00
关于Pickle,我觉得你需要知道更多。顺便广告一枚介绍一些pickle的经验 http://weibo.com/1739612153/ywd7xBsUN
|