我正在寻找一个支持Python的良好服务器/客户端协议,用于在一个服务器和许多客户端之间进行数据请求/文件传输.安全性也是一个问题 - 因此安全登录将是一个优势.我一直在研究XML-RPC,但它看起来是一个非常古老的(现在可能还没用?)协议.
如果您希望进行文件传输,XMLRPC可能是一个糟糕的选择.它需要您将所有数据编码为XML(并将其加载到内存中).
"数据请求"和"文件传输"听起来很像普通的旧HTTP,但是你对问题的陈述并没有明确要求.需要在请求中编码哪种信息?像" http://yourserver.example.com/service/request?color=yellow&flavor=banana " 这样的网址是否足够好?
Python中有很多HTTP客户端和服务器,其中没有一个特别好,但我确信所有这些都将完成基本文件传输的工作.您可以使用"正常"Web方式执行安全性,即使用HTTPS和密码,这可能就足够了.
如果你想要双向通信,那么HTTP就会崩溃,像Twisted的透视代理(PB)或异步消息协议(AMP)这样的协议可能会更适合你.Twisted肯定很好地支持这些协议.
Google发布了ProtocolBuffers,作为一种以非常紧凑的高效方式序列化数据的方式.他们支持C++,Java和Python.我还没有使用它,但从源头看,似乎每种语言都有RPC客户端和服务器.
我个人在几个项目中使用过XML-RPC,它总是完全按照我的意愿行事.我通常介于C++,Java和Python之间.我经常在Python中使用libxmlrpc,因为它易于记忆和交互式输入,但它实际上比替代pyxmlrpc慢得多.
PyAMF主要用于带有Flash客户端的RPC,但它也是一种值得关注的紧凑型RPC格式.
当你的两端都有Python时,我不相信Pyro (Python远程对象).Pyro甚至还有一个"名称服务器",可以让服务宣布它们可用于网络.客户端使用名称服务器来查找它所需的服务,无论它们在特定时刻处于何种活动状态.这为您提供了免费冗余,并且能够在不停机的情况下将服务从一台机器移动到另一台机器.
为了安全起见,我通过SSH进行隧道传输,或者在连接级别使用TLS或SSL.当然,所有这些选项基本相同,它们只有各种设置难度.
如果所有服务器/客户端都在Python中,Pyro(Python远程对象)相当聪明.我使用XMPP很多,因为我正在与不总是Python的主机通信.XMPP也很容易扩展.
有一个优秀的python XMPP库,名为PyXMPP,它是合理的最新版本,不依赖于Twisted.