本文共 1525 字,大约阅读时间需要 5 分钟。
转载:
RPC(远程过程调用):把本地的函数,放到远端去调用。其调用原理是: 1)首先A与B之间建立一个TCP连接; 2) 然后A把需要调用的方法名以及参数序列化成字节流发送出去; 3)B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用并把结果返回; 4)A接受远程调用结果,然后do()。RPC框架也就是把上线说的具体的细节封装起来,给用户提供API使用。
XML-RPC:XML Remote Procedure Call,即XML远程方法调用,利用http+xml封装进行RPC调用。基于http协议传输、XML作为信息编码格式。一个xml-rpc消息就是一个请求体为xml的http-post请求,服务端执行后也以xml格式编码返回。举例:
server端:#!/usr/bin/env pythonfrom SimpleXMLRPCServer import SimpleXMLRPCServerglobal valval = 1class RPCTest(object): def global_test(self): global val val += 2 return val def add(self, x, y): return x + y def subtract(self, x, y): return x - y def multiply(self, x, y): return x * y def divide(self, x, y): return x / yserver = SimpleXMLRPCServer(("localhost", 8000))print "Listening on port 8000..."rpc_test = RPCTest()server.register_multicall_functions()server.register_function(rpc_test.add, 'add')server.register_function(rpc_test.subtract, 'subtract')server.register_function(rpc_test.multiply, 'multiply')server.register_function(rpc_test.divide, 'divide')server.register_function(rpc_test.global_test, 'global_test')server.serve_forever()
Client端:
#!/usr/bin/env pythonimport xmlrpclibproxy = xmlrpclib.ServerProxy("http://localhost:8000/")multicall = xmlrpclib.MultiCall(proxy)#multicall.add(7,3)#multicall.subtract(7,3)#multicall.multiply(7,3)#multicall.divide(7,3)#print("7+3=%d, 7-3=%d, 7*3=%d, 7/3=%d" % (tuple(result)))multicall.global_test()result = multicall()print("result = %d" % (tuple(result)))