Python XML RPC服务器端和客户端实例

一、远程过程调用RPC

XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP as a transport. With it, a client can call methods with parameters on a remote server (the server is named by a URI) and get back structured data. This module supports writing XML-RPC client code; it handles all the details of translating between conformable Python objects and XML on the wire.

简单地,client可以调用server上提供的方法,然后得到执行的结果。类似与webservice。

推荐查看xmlprc的源文件:C:\Python31\Lib\xmlrpc

二、实例

1) Server

from xmlrpc.server import SimpleXMLRPCServer from xmlrpc.server import SimpleXMLRPCRequestHandler

def div(x,y):     return x - y     class Math:     def _listMethods(self):         # this method must be present for system.listMethods         # to work         return ['add', 'pow']     def _methodHelp(self, method):         # this method must be present for system.methodHelp         # to work         if method == 'add':             return "add(2,3) => 5"         elif method == 'pow':             return "pow(x, y[, z]) => number"         else:             # By convention, return empty             # string if no help is available             return ""     def _dispatch(self, method, params):         if method == 'pow':             return pow(*params)         elif method == 'add':             return params[0] + params[1]         else:             raise 'bad method'

server = SimpleXMLRPCServer(("localhost", 8000)) server.register_introspection_functions() server.register_function(div,"div") server.register_function(lambda x,y: x*y, 'multiply') server.register_instance(Math()) server.serve_forever()

2)client

import xmlrpc.client

s = xmlrpc.client.ServerProxy('http://localhost:8000')

print(s.system.listMethods())

print(s.pow(2,3))  # Returns 28 print(s.add(2,3))  # Returns 5 print(s.div(3,2))  # Returns 1 print(s.multiply(4,5)) # Returns 20

3)result