协议缓冲器是“轻量级”的,因为它们产生非常紧凑的线路表示,从而节省带宽,内存,存储等,同时保持非常通用的跨语言。当然,我们在Google上使用他们的批次,但是您是否关心这些性能特征并不清楚 - 您似乎在与此不同的意义上使用“轻量级”,严格与(精神)负载相关在你身上,程序员,而不是所有在计算机和网络上的(计算)负载;-)。
如果您不关心花费更多的带宽/内存/等等,而且您也不关心以不同语言编写参与子系统的能力,那么协议缓冲区可能对您而言并不是最佳选择。
既不是pickling
,如果我正确地读了你的“有点安全”的要求:取消适当构造的恶意pickled-string可以在取出机器上执行任意代码。事实上,HTTP在一定程度上并不“有些安全”:在该协议中没有任何东西可以阻止入侵者“嗅探”您的流量(所以您绝对不应该使用HTTP发送机密有效负载,除非您可能使用强加密在发送它之前的有效载荷并在接收它之后撤消)。为了安全(再次取决于你对这个词的含义),你需要HTTPS或者(更简单的设置,不需要你购买证书!)SSH隧道。
一旦确实在两台机器之间建立了SSH隧道(对于Python,paramiko
可以提供帮助,但即使通过shell脚本或通过其他方式直接控制ssh
命令行客户端也不会太糟糕;-)您可以运行它上面的任何协议(例如HTTP都可以),因为隧道端点可以作为您可以打开套接字的给定编号的端口。我个人推荐使用JSON而不是XML来对有效载荷进行编码 - 例如,对于基于XMLRPC的基于JSON的RPC服务器和客户端,请参阅here - 但我猜想使用Python标准库附带的XMLRPC服务器和客户端是甚至更简单,因此可能更接近你正在寻找的东西。为什么你还想要cherrypy?现在性能突然变得简单了,仅仅是整个架构的这个方面,而在其他任何情况下,性能都是简单的?这似乎是一个非常矛盾的建筑选择! - )
@尼克你有什么特别不喜欢protobuf?它如何不像XML-RPC那样轻量级? – 2010-02-04 14:01:09
我更新了我的答案。 – 2010-02-04 14:56:00
通过https的JSON?当然有一个Python库来处理JSON。 – 2010-02-04 16:00:08