zoukankan      html  css  js  c++  java
  • 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))
  • 相关阅读:
    PHP 操作redis常用方法代码
    PHP 大型网站 高并发大流量解决方案
    Nginx 负载均衡
    maven中mirror与repositories的关系
    Java事件机制---自定义事件
    sql优化几个方面
    临时表的概念
    sql产生临时表
    MySQL rows
    工厂模式 https://www.jianshu.com/p/6dfb5b66d088
  • 原文地址:https://www.cnblogs.com/lightsong/p/13976835.html
Copyright © 2011-2022 走看看