• xmlrpc of Python


    xmlrpc

    允许软件在不同系统运行。实现计算和存储资源的共享。

    http://xmlrpc.com/

    It's a spec and a set of implementations that allow software running on disparate operating systems, running in different environments to make procedure calls over the Internet.

    It's remote procedure calling using HTTP as the transport and XML as the encoding. XML-RPC is designed to be as simple as possible, while allowing complex data structures to be transmitted, processed and returned.

    xmlrpc of python

    https://docs.python.org/3.7/library/xmlrpc.html

    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.

    xmlrpc is a package that collects server and client modules implementing XML-RPC. The modules are:

    xmlrpc.server

    https://docs.python.org/3.7/library/xmlrpc.server.html#module-xmlrpc.server

    The xmlrpc.server module provides a basic server framework for XML-RPC servers written in Python. Servers can either be free standing, using SimpleXMLRPCServer, or embedded in a CGI environment, using CGIXMLRPCRequestHandler.

    xmlrpc.client

    https://docs.python.org/3.7/library/xmlrpc.client.html#module-xmlrpc.client

    XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP(S) 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.

    DEMO

    https://docs.python.org/3.7/library/xmlrpc.server.html#simplexmlrpcserver-example

    SERVER

    from xmlrpc.server import SimpleXMLRPCServer
    from xmlrpc.server import SimpleXMLRPCRequestHandler
    
    # Restrict to a particular path.
    class RequestHandler(SimpleXMLRPCRequestHandler):
        rpc_paths = ('/RPC2',)
    
    # Create server
    with SimpleXMLRPCServer(('localhost', 8000),
                            requestHandler=RequestHandler) as server:
        server.register_introspection_functions()
    
        # Register pow() function; this will use the value of
        # pow.__name__ as the name, which is just 'pow'.
        server.register_function(pow)
    
        # Register a function under a different name
        def adder_function(x, y):
            return x + y
        server.register_function(adder_function, 'add')
    
        # Register an instance; all the methods of the instance are
        # published as XML-RPC methods (in this case, just 'mul').
        class MyFuncs:
            def mul(self, x, y):
                return x * y
    
        server.register_instance(MyFuncs())
    
        # Run the server's main loop
        server.serve_forever()

    CLIENT

    import xmlrpc.client
    
    s = xmlrpc.client.ServerProxy('http://localhost:8000')
    print(s.pow(2,3))  # Returns 2**3 = 8
    print(s.add(2,3))  # Returns 5
    print(s.mul(5,2))  # Returns 5*2 = 10
    
    # Print list of available methods
    print(s.system.listMethods())

    MultiCall

    考虑到多次调用耗费很大,将多次调用封装成单次调用,以节省资源开销。

    The MultiCall object provides a way to encapsulate multiple calls to a remote server into a single request 1.

    https://docs.python.org/3.7/library/xmlrpc.client.html#module-xmlrpc.client

    SERVER

    from xmlrpc.server import SimpleXMLRPCServer
    
    def add(x, y):
        return x + y
    
    def subtract(x, y):
        return x - y
    
    def multiply(x, y):
        return x * y
    
    def divide(x, y):
        return x // y
    
    # A simple server with simple arithmetic functions
    server = SimpleXMLRPCServer(("localhost", 8000))
    print("Listening on port 8000...")
    server.register_multicall_functions()
    server.register_function(add, 'add')
    server.register_function(subtract, 'subtract')
    server.register_function(multiply, 'multiply')
    server.register_function(divide, 'divide')
    server.serve_forever()

    CLIENT

    import xmlrpc.client
    
    proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")
    multicall = xmlrpc.client.MultiCall(proxy)
    multicall.add(7, 3)
    multicall.subtract(7, 3)
    multicall.multiply(7, 3)
    multicall.divide(7, 3)
    result = multicall()
    
    print("7+3=%d, 7-3=%d, 7*3=%d, 7//3=%d" % tuple(result))
  • 相关阅读:
    IOS创建Button简单实例
    IOSActionSheet、AlertView、Slider、Switch的简单使用
    IOS翻转注意
    [教程]iOS 4 开发的好东西 (资料)url
    Proxy和Decorator模式
    Using JNDI connecting DB
    影片“One Day”,还不错
    Minabased TCP server examples
    MySQL vs. Oracle on sequence
    Java DB and JDBC(Embedded Derby)
  • 原文地址:https://www.cnblogs.com/lightsong/p/13976835.html
Copyright © 2020-2023  润新知