Python XML-RPC

Da Andreabont's Wiki.

XML-RPC è un tipo di chiamata a funzione remota (RPC) via TCP/IP che sfrutta la codifica XML nel protocollo. Visita la pagina ufficiale.

Versione normale

Server

from xmlrpc.server import SimpleXMLRPCServer

server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(lambda x,y: x+y, 'add')
server.serve_forever()

Client

import xmlrpc.client

client = xmlrpc.client.ServerProxy("http://localhost:8000/")
client.add(1,2)

Versione multicall

E' possibile abilitare la modalità multicall, in modo da poter "fondere" più chiamate insieme in una sola, riducendo i tempi di latenza. Anche se abilitata questa modalità è sempre possibile fare chiamate singole come nella versione semplice.

Server

from xmlrpc.server import SimpleXMLRPCServer

server = SimpleXMLRPCServer(("localhost", 8000))
server.register_multicall_functions() # Modalità multicall
server.register_function(lambda x,y: x+y, 'add')
server.register_function(lambda x,y: x-y, 'sub')
server.serve_forever()

Client

import xmlrpc.client

proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")
multicall = xmlrpc.client.MultiCall(proxy)
multicall.add(1,3)
multicall.sub(3,2)
print(tuple(multicall()))


Versione con introspezione

E' possibile abilitare l'introspezione remota in modo da fornire ai client la lista dei metodi esposti

Server

from xmlrpc.server import SimpleXMLRPCServer

server = SimpleXMLRPCServer(("localhost", 8000))
server.register_introspection_functions() # Registra le funzioni di introspezione
server.register_function(lambda x,y: x+y, 'add')
server.register_function(lambda x,y: x-y, 'sub')
server.serve_forever()

Client

import xmlrpc.client

client = xmlrpc.client.ServerProxy("http://localhost:8000/")
print(client.system.listMethods())