一、远程过程调用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