Python利用XMLRPC实现分布式系统

转载:https://blog.csdn.net/abcd1f2/article/details/51351938
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 python
from SimpleXMLRPCServer import SimpleXMLRPCServer

global val
val = 1

class 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 / y


server = 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 python
import xmlrpclib

proxy = 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)))

猜你喜欢

转载自blog.csdn.net/qq_41688455/article/details/86614385
今日推荐