我有两台地理位置分散的计算机,都连接到互联网.在每台计算机上,我正在运行一个Python程序,我想从一个到另一个发送和接收数据.我想尽可能使用最简单的方法,同时保持一定的安全性.
我考虑过以下解决方案,但我不确定哪个是最简单的:
HTTP服务器和客户端,使用protobuf*;
SOAP Web服务和客户端(可能是pywebsvcs?);
通过SSH隧道的某种IPC - 再次,protobuf可能?
就像我说的,我希望解决方案有点安全,但简单是最重要的要求.数据非常简单; 类型A的对象,包含类型B的对象列表和其他一些字段.
*我过去使用过protobuf,所以唯一的困难就是设置HTTP服务器,我想这将是非常棒的.
协议缓冲区是"轻量级的",因为它们可以生成非常紧凑的线路表示,从而节省带宽,内存,存储等 - 同时保持非常通用和跨语言.当然,我们在谷歌使用它们很多,但目前尚不清楚你是否关心这些性能特征 - 你似乎使用"轻量级"与此截然不同,严格地与你的(心理)负载相关联,程序员,而不是计算机和网络上的(计算)负载;-).
如果你不关心花费更多的带宽/内存/等等,并且你也不关心用不同语言编写参与子系统的代码的能力,那么协议缓冲区可能不适合你.
也不是pickling
,如果我正确地阅读了你的"有点安全"的要求:取消一个适当构造的恶意腌制字符串可以在unpickling机器上执行任意代码.事实上,HTTP是不是在一个稍微不同的感觉"有点安全":有没有在该协议从"嗅"您的流量(所以你不应该使用HTTP发送机密有效载荷阻止入侵者的,除非也许你在使用强加密发送之前的有效负载,接收之后撤消它).为了安全(再次取决于你对单词的含义),你需要HTTPS或(更简单的设置,不需要你购买证书! - )SSH隧道.
一旦你在两台机器之间建立了SSH隧道(对于Python,paramiko
可以提供帮助,但即使通过shell脚本或通过直接控制ssh
命令行客户端来实现它也不错;-)你可以在其上运行任何协议(HTTP)很好,例如),因为隧道端点可以作为给定的编号端口使用,您可以在其上打开套接字.我个人建议JSON而不是XML编码有效载荷-看到这里一个XMLRPC样基于JSON-RPC服务器和客户端,例如-但我猜,使用XMLRPC服务器和客户端来与Python的标准库甚至更简单,因此可能更接近你正在寻找的东西.你为什么还想要樱桃?对于整个架构的这个方面,性能现在突然胜过简单性,而在其他所有情况下,性能都是简单的选择吗?这似乎是一组特别矛盾的建筑选择! - )