最佳Python支持的服务器/客户端协议?
我在找一个适合用Python的好服务器/客户端协议,用来在一个服务器和多个客户端之间进行数据请求和文件传输。同时,安全性也是个问题,所以如果能有安全登录功能就更好了。我之前在研究XML-RPC,但感觉这个协议有点老旧(现在可能也不常用了?)。
11 个回答
Protocol Buffers 是谷歌推出的一种数据序列化方式,能以非常紧凑和高效的方式来处理数据。它支持 C++、Java 和 Python 这几种编程语言。我自己还没用过,但从源代码来看,每种语言似乎都有对应的 RPC 客户端和服务器。
我个人在几个项目中使用过 XML-RPC,它总是能如我所愿地工作。我通常在 C++、Java 和 Python 之间切换。我在 Python 中经常使用 libxmlrpc,因为它容易记住和输入,但其实它的速度比另一个选择pyxmlrpc要慢很多。
PyAMF 主要是用于与 Flash 客户端的 RPC,但它也是一种值得关注的紧凑 RPC 格式。
如果两端都是 Python,我觉得没有什么能比Pyro(Python 远程对象)更好了。Pyro 甚至有一个“名称服务器”,可以让服务在网络上宣布它们的可用性。客户端可以通过名称服务器找到它需要的服务,无论这些服务此刻在哪台机器上运行。这种方式提供了免费的冗余,并且可以在不停止服务的情况下将服务从一台机器移动到另一台机器。
为了安全起见,我会通过 SSH 隧道,或者在连接层使用 TLS 或 SSL。当然,这些选项本质上是相同的,只是在设置上有不同的难度。
如果你想进行文件传输,使用XMLRPC可能不是个好主意。因为它需要你把所有的数据都转成XML格式(而且还要把这些数据加载到内存里)。
听起来“数据请求”和“文件传输”就像是普通的HTTP请求,但你描述的问题没有清楚地说明你的需求。你需要在请求中编码什么样的信息呢?像这样的URL "http://yourserver.example.com/service/request?color=yellow&flavor=banana" 够不够用呢?
在Python中有很多HTTP客户端和服务器,虽然没有特别优秀的,但我相信它们都能完成基本的文件传输工作。你可以用“正常”的网络方式来保证安全,也就是使用HTTPS和密码,这样应该就足够了。
如果你想要双向通信,那HTTP就不太合适了,像Twisted的视角代理(PB)或者异步消息协议(AMP)可能会更适合你。这些协议在Twisted中得到了很好的支持。