一、简介:
本文介绍了在开发分布式系统过程中,python的作用。 开发分布式的系统,是一个困难的挑战。而远程过程调用( Remote Procedure Call)提供了一种简单的构建分布式系统的方式。 网络通信的时候,把RPC服务通过接口暴露出来, 这样看起来就像是一个普通的过程调用。 当你调用远程服务器的一个函数的时候, RPC系统负责处理通信所有的细节。现在流行的云计算平台, 例如openstack系统,该系统在内部实现中, 各个服务之间大量使用了RPC服务做通信。
自己所知道的RPC接口有三种:CORBA(Common Object Request Broker Architecture),PB(Twisted 的 Perspective Broker), Simple XML-RPC.
CORBA是一个 “重型” 的协议,虽然功能丰富,有专用的打包和传输层,但是不容易掌握。 python有一个开源的模块:http://omniorb. sourceforge.net/ 提供了CORBA的实现,建议使用。
PB也很轻量化,但是提供了比XML-RPC更丰富的功能。 它提供了异步的网络事务处理模式,这也是Twisted的特点, 这种异步模式是Twisted的核心,对于网络的应用, 异步模式在性能和可伸缩性上有巨大的优势。
XML-RPC是一个更轻量级,易于使用的协议, 数据传输使用XML打包,通过HTTP传输。 虽然功能不如CORBA丰富,但因为简单,轻量,所以流传很广, 便于使用。
XML-RPC的规范,请参考:http://xmlrpc. scripting.com/spec
二、XML-RPC的具体实现
python中提供了一个SimpleXMLRPCServer 模块,用于编写XML-RPC的服务器。
然后客户端使用xmlrpc模块来访问XML-RPC服务器。
XML-RPC的服务器代码:
# -*- coding: utf-8 -*-
import SimpleXMLRPCServer
class MyObject:
def sayHello(self):
return "hello xmlprc"
obj = MyObject()
server = SimpleXMLRPCServer. SimpleXMLRPCServer((" localhost", 80))
server.register_instance(obj)
print "Listening on port 80"
server.serve_forever()
XML-RPC客户端代码:
# -*- coding: utf-8 -*-
import xmlrpclib
server = xmlrpclib.ServerProxy("http:// localhost:80")
words = server.sayHello()
print "result:" + words
没有评论:
发表评论