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