欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

教你怎么使用XML库实现RPC通信的功能

程序员文章站 2022-03-26 16:56:54
...
1、先说结论:使用xml-rpc的机制可以很方便的实现服务器间的RPC调用。

2、试验结果如下:

教你怎么使用XML库实现RPC通信的功能

3、源码如下:

服务器端的源代码如下:

import operator, math
from SimpleXMLRPCServer import SimpleXMLRPCServer
from functools import reduce

def main():
    server = SimpleXMLRPCServer(('127.0.0.1', 7001))
    server.register_introspection_functions()
    server.register_multicall_functions()
    server.register_function(addtogether)
    server.register_function(quadratic)
    server.register_function(remote_repr)
    
    print("Server ready")
    server.serve_forever()
    
def addtogether(*things):
    """Add together everything in the list things ."""
    return reduce(operator.add, things)
    
def quadratic(a, b, c):
    """Determine x values satisfying: a * x * x + b * x + c = 0"""
    b24ac = math.sqrt(b*b - 4.0*a*c)
    return list(set([(-b-b24ac) / 2.0*a, (-b+b24ac) / 2.0*a]))
    
def remote_repr(arg):
    """return the repr() rendering of the supplied arg """
    return arg
    
if __name__ == '__main__':
    main()

客户端的代码如下:

import xmlrpclib

def main():
    proxy = xmlrpclib.ServerProxy('http://127.0.0.1:7001')
    
    print("Here are the functions supported by this server:")
    
    print("next calculator addtogether: ")
    print(proxy.addtogether('x','y','z'))
    print(proxy.addtogether('x','y','z'))
    
    print(proxy.addtogether('x','y','z'))
    print(proxy.addtogether('x','y','z'))
    for method_name in proxy.system.listMethods():
        if method_name.startswith('system.'):
            continue
            
        signatures = proxy.system.methodSignature(method_name)
        if isinstance(signatures, list) and signatures:
            for signature in signatures:
                print('%s(%s)' %(method_name, signature))
                
        else:
            print('%s(...)' %(method_name,))
            
        method_help = proxy.system.methodHelp(method_name)
        #if method_help:
        #    print(' ', methodHelp)
    
    print(proxy.addtogether('x','y','z'))
    print("addtogether result ")
            
if __name__ == '__main__':
    main()

以上就是教你怎么使用XML库实现RPC通信的功能的详细内容,更多请关注其它相关文章!