2012年7月27日星期五

每天进步一点点 --- python xmlrpc模块学习笔记

一、简介:
本文介绍了在开发分布式系统过程中,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

没有评论:

发表评论