Maison >développement back-end >Tutoriel Python >Vous apprendre à utiliser la bibliothèque XML pour implémenter les fonctions de communication RPC

Vous apprendre à utiliser la bibliothèque XML pour implémenter les fonctions de communication RPC

怪我咯
怪我咯original
2017-06-23 14:32:451216parcourir

1. Permettez-moi de commencer par la conclusion : l'utilisation du mécanisme xml-rpc peut facilement implémenter des appels RPC entre serveurs.

2. Les résultats du test sont les suivants :

3. >Le code source côté serveur est le suivant :

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()

Le code client est le suivant :

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()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn