2010-02-04 47 views
6

我在地理上分散的地点有两台电脑,都连接到互联网。在每台计算机上,我正在运行一个Python程序,并且我想发送和接收来自另一个的数据。我想尽可能使用最简单的方法,同时保持一定的安全性。使用Python通过互联网传输数据的最轻量级方式是什么?

我已经考虑了以下解决方案,但我不知道这是最简单的:

  • HTTP服务器和客户端,使用protobuf *; SOAP服务和客户端(pywebsvcs也许?);
  • SSH隧道上的某种IPC - 再次,protobuf也许?

就像我说的,我希望解决方案有点安全,但简单是最重要的要求。数据非常简单;类型A的对象,其中包含类型B的对象的列表,以及其他一些字段。

*我过去使用过protobuf,所以唯一的困难就是设置HTTP服务器,我猜这会是cherrypy。

+0

@尼克你有什么特别不喜欢protobuf?它如何不像XML-RPC那样轻量级? – 2010-02-04 14:01:09

+0

我更新了我的答案。 – 2010-02-04 14:56:00

+0

通过https的JSON?当然有一个Python库来处理JSON。 – 2010-02-04 16:00:08

回答

3

最便宜和最简单的传输方式可能是XML-RPC。它通过HTTP运行(所以你可以这样保护它),它在标准库中,与protobuf不同,你不必担心创建和编译你的数据类型文件(因为两端都运行Python,动态类型应该不是问题)。唯一需要注意的是,任何未在XML-RPC中表示的类型都必须进行酸洗或序列化。

+0

是的,这就是关于protobuf的最重要的东西;它似乎并不轻巧。我将检查XML-RPC。 – 2010-02-04 13:46:59

+2

为什么不简单地泡菜? 'cPickle'很快。 – 2010-02-04 15:24:25

+0

@Antoine P.啊,我已经实现了xml-rpc,但我会在下次尝试! – 2010-02-08 19:53:28

0

你可以考虑Pyro,请务必阅读Security chapter

更新:看来简单的设置比Protocol Buffers的,可能需要较少的工作,如果您的需求在未来变得越来越复杂(他们有这样做的一种方式...... :-)

+0

看起来不错,但它似乎可能有点太强大,我想做什么,你不觉得吗? – 2010-02-04 13:55:06

9

协议缓冲器是“轻量级”的,因为它们产生非常紧凑的线路表示,从而节省带宽,内存,存储等,同时保持非常通用的跨语言。当然,我们在Google上使用他们的批次,但是您是否关心这些性能特征并不清楚 - 您似乎在与此不同的意义上使用“轻量级”,严格与(精神)负载相关在你身上,程序员,而不是所有在计算机和网络上的(计算)负载;-)。

如果您不关心花费更多的带宽/内存/等等,而且您也不关心以不同语言编写参与子系统的能力,那么协议缓冲区可能对您而言并不是最佳选择。

既不是pickling,如果我正确地读了你的“有点安全”的要求:取消适当构造的恶意pickled-string可以在取出机器上执行任意代码。事实上,HTTP在一定程度上并不“有些安全”:在该协议中没有任何东西可以阻止入侵者“嗅探”您的流量(所以您绝对不应该使用HTTP发送机密有效负载,除非您可能使用强加密在发送它之前的有效载荷并在接收它之后撤消)。为了安全(再次取决于你对这个词的含义),你需要HTTPS或者(更简单的设置,不需要你购买证书!)SSH隧道。

一旦确实在两台机器之间建立了SSH隧道(对于Python,paramiko可以提供帮助,但即使通过shell脚本或通过其他方式直接控制ssh命令行客户端也不会太糟糕;-)您可以运行它上面的任何协议(例如HTTP都可以),因为隧道端点可以作为您可以打开套接字的给定编号的端口。我个人推荐使用JSON而不是XML来对有效载荷进行编码 - 例如,对于基于XMLRPC的基于JSON的RPC服务器和客户端,请参阅here - 但我猜想使用Python标准库附带的XMLRPC服务器和客户端是甚至更简单,因此可能更接近你正在寻找的东西。为什么你还想要cherrypy?现在性能突然变得简单了,仅仅是整个架构的这个方面,而在其他任何情况下,性能都是简单的?这似乎是一个非常矛盾的建筑选择! - )

+0

在这种情况下,轻量级对我来说意味着“紧凑型表示”。请记住SSH也可以进行即时压缩。 – 2010-02-04 19:24:38

+0

@Alex Martelli哈哈,是的,我的意思是轻量,因为“实施更少的努力”,而不是“更少的电脑努力”。仅供参考,我决定使用Python的xml-rpc库,因为它似乎是最简单的解决方案。 – 2010-02-08 19:52:43

0

Alex当然是对的。但是,我会记住,我过去一直很乐意用酸洗数据,并通过SSH将其推向另一个取消处理的过程。这很简单。

但是,它不适合很多事情。你真的需要信任传入的数据,在我的博客服务器收到一篇腌制博客帖子(我的客户解析出标签等)的情况下,我确实相信数据 - 它已经被我认证了。

亚历克斯工作的Google是一个完全不同的问题。 :-)

相关问题